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

using typename with reinterpret_cast()

本文关键字:一起 cast 类型 reinterpret      更新时间:2023-10-16

如何创建一个作为reinterpret_cast结果的typename?

例如

template<typename T1> class node{
public:
using null_sp2node = typename reinterpret_cast<shared_ptr<node<T1>>>(NULL);
};

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

错误:"类型名称"之后应是限定名称

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为非指针类型(某些整数类型除外(。