【发布时间】:2015-03-25 18:43:25
【问题描述】:
考虑以下代码:
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;
//...
}
【问题讨论】:
标签: c++ templates pointers c++11 typename