我有以下内容:
type* ptr;
我想从type
中获取ptr
。我尝试使用declval
/ declval
/ decay
但无法让它发挥作用(这就是当您对自己正在做的事情没有深刻理解时会发生什么)。
那么如何获取类型并创建相同类型的变量 - 如type some_var;
答案 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, "");
或者,您可以使用decltype
和std::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;