如何创建通用函数,它将 return 任何级别的指针在 C++ 中的值?
how to create generic function which will return value of any level of pointer in c++?
我想要一个函数,它将return指针的值,无论指针是什么级别。
就像它可以是单指针或双指针或三指针或更多,但该函数应该 return 值。
示例:
#include <iostream>
using namespace std;
template <class T>
T func(T arg){
// what to do here or there is some other way to do this?????
}
int main() {
int *p, **pp, ***ppp;
p = new int(5);
pp = &p;
ppp = &pp;
cout << func(p); // should print 5
cout << func(pp); // should print 5
cout << func(ppp); // should print 5
return 0;
}
所以,现在我只想在一个函数中传递这个 p、pp、ppp,它应该打印或 return 值 '5'。
只有一个重载接受任何指针并调用自身取消引用,以及一个接受任何东西的重载:
template <class T>
T func(T arg) {
return arg;
}
template <class T>
auto func(T* arg){
return func(*arg);
}
即使没有 C++11,这也是可能的,只需要编写一个类型特征来完成所有的解引用:
template <class T>
struct value_type { typedef T type; };
template <class T>
struct value_type<T*> : value_type<T> { };
template <class T>
T func(T arg) {
return arg;
}
template <class T>
typename value_type<T>::type func(T* arg){
return func(*arg);
}
我想要一个函数,它将return指针的值,无论指针是什么级别。 就像它可以是单指针或双指针或三指针或更多,但该函数应该 return 值。
示例:
#include <iostream>
using namespace std;
template <class T>
T func(T arg){
// what to do here or there is some other way to do this?????
}
int main() {
int *p, **pp, ***ppp;
p = new int(5);
pp = &p;
ppp = &pp;
cout << func(p); // should print 5
cout << func(pp); // should print 5
cout << func(ppp); // should print 5
return 0;
}
所以,现在我只想在一个函数中传递这个 p、pp、ppp,它应该打印或 return 值 '5'。
只有一个重载接受任何指针并调用自身取消引用,以及一个接受任何东西的重载:
template <class T>
T func(T arg) {
return arg;
}
template <class T>
auto func(T* arg){
return func(*arg);
}
即使没有 C++11,这也是可能的,只需要编写一个类型特征来完成所有的解引用:
template <class T>
struct value_type { typedef T type; };
template <class T>
struct value_type<T*> : value_type<T> { };
template <class T>
T func(T arg) {
return arg;
}
template <class T>
typename value_type<T>::type func(T* arg){
return func(*arg);
}