如何创建reinterpret_cast结果的typename?
例如,
template<typename T1> class node{
public:
using null_sp2node = typename reinterpret_cast<shared_ptr<node<T1>>>(NULL);
};
以上生成以下编译器错误:
错误:在&#39; typename&#39;
之后需要一个合格的名称
答案 0 :(得分:3)
reinterpret_cast
会返回值,而不是类型。具体来说,这是一个表达。如果要获取表达式的类型,正确的工具是decltype
:
using null_sp2node = decltype(reinterpret_cast<shared_ptr<node<T1>>>(NULL));
但是,因为reinterpret_cast<T>
的结果是T
类型的表达式,所以与仅仅相比,实际上没有任何意义:
using null_sp2node = shared_ptr<node<T1>>;
当然,由于reinterpret_cast<shared_ptr<node<T1>>>(NULL)
一开始就是形成的,所以它并不重要。你不能reinterpret_cast
空指针常量到非指针类型(某些整数类型除外)。