获取一个typename,给出C ++中指向它的指针的类型名称

时间:2015-03-25 18:43:25

标签: c++ templates pointers c++11 typename

请考虑以下代码:

class c {
  //...
};

template <typename T>
void f(T k)
{
    auto item = new T;
    //...
}

我们声明了一个类c和一个模板函数f,它创建了一个新的对象类型T

我想更改此函数f,因此模板参数可以是指针类型,它将按如下方式使用:

auto ptr = new c;
f<c*>(ptr);

现在,当我尝试创建新项目auto item = new T;时出现问题,因为现在T现在是指向c指针的类型名称。

我知道T将始终是指向某个内容的指针,如何才能获得T指向的类型名称?我想做类似的事情:

template <typename T>
void f(T k)
{
    // If T = int* -> Q = int
    typename ??????? Q;    // <<<<<<<<
    auto item = new Q;
    //...
}

1 个答案:

答案 0 :(得分:5)

使用std::remove_pointer

#include <type_traits>

using Q = typename std::remove_pointer<T>::type;