将类型名称与 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
指向非指针类型的空指针常量(某些整数类型除外)。
如何创建作为 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
指向非指针类型的空指针常量(某些整数类型除外)。