【问题标题】:Getting a typename given the typename of a pointer to it in C++给定 C++ 中指向它的指针的类型名,获取类型名
【发布时间】: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


    【解决方案1】:

    std::remove_pointer:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2015-04-06
      • 2019-08-28
      • 1970-01-01
      • 2023-01-20
      • 2020-12-16
      • 2010-10-22
      相关资源
      最近更新 更多