将类型名称与 reinterpret_cast() 一起使用

using typename with reinterpret_cast()

如何创建作为 reinterpret_cast 结果的类型名称?

例如,

template<typename T1> class node{

public:

using null_sp2node = typename reinterpret_cast<shared_ptr<node<T1>>>(NULL);

};

以上生成以下编译器错误:

error: expected a qualified name after 'typename'

reinterpret_cast returns 一个 ,不是类型。具体来说,它是一个表达式。如果要获取表达式的类型,正确的工具是decltype:

using null_sp2node = decltype(reinterpret_cast<shared_ptr<node<T1>>>(NULL));

但是,因为 reinterpret_cast<T> 的结果是类型 T 的表达式,与 just:

相比,这真的没有意义
using null_sp2node = shared_ptr<node<T1>>;

当然,因为 reinterpret_cast<shared_ptr<node<T1>>>(NULL) 一开始就是不合式的,所以这并不重要。您不能 reinterpret_cast 指向非指针类型的空指针常量(某些整数类型除外)。