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

how to create generic function which will return value of any level of pointer in c++?

本文关键字:函数 c++ 返回 任何级 指针 何创建 创建 泛型      更新时间:2023-10-16

我想要一个函数,它将返回指针的值,而不管它是什么级别的指示器。就像它可以是单指针或双指针或三指针或更多,但该函数应该返回值。

示例:

#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,它应该打印或返回值"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);
}