请考虑以下代码:
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;
//...
}
答案 0 :(得分:5)
#include <type_traits>
using Q = typename std::remove_pointer<T>::type;