如何创建泛型函数,它将返回c ++中任何级别指针的值?

时间:2016-03-29 13:07:29

标签: c++ templates pointers generic-programming

我想要一个能够返回指针值的函数,无论它是什么级别的指针。 就像它可以是单个或双指针或三指针或更多,但该函数应该返回值。

示例:

#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,它应该打印或返回值&#39; 5&#39;。

1 个答案:

答案 0 :(得分:10)

只需要一个带有任何指针的调用,并调用它自己的解引用,以及一个带有任何内容的重载:

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);
}