如何在C ++ 11中获取指针的类型

时间:2017-03-20 09:27:10

标签: c++ c++11

我有以下内容:

type* ptr;

我想从type中获取ptr。我尝试使用declval / declval / decay但无法让它发挥作用(这就是当您对自己正在做的事情没有深刻理解时会发生什么)。

那么如何获取类型并创建相同类型的变量 - 如type some_var;

1 个答案:

答案 0 :(得分:6)

您可以使用std::remove_pointer类型特征:

using ptr_type = int*;
using type = std::remove_pointer<ptr_type>::type;

static_assert(std::is_same<type, int>::value, "");

或者,您可以使用decltypestd::declval

using ptr_type = int*;
using type = decltype(*std::declval<ptr_type>());

static_assert(std::is_same<type, int>::value, "");

如果您在std::remove_reference内直接使用解除引用表达式,则可能还需要使用decltype

int* ptr = nullptr; 
std::remove_reference<decltype(*ptr)>::type var = 7;