【问题标题】:using typename with reinterpret_cast()将 typename 与 reinterpret_cast() 一起使用
【发布时间】:2018-07-14 19:49:16
【问题描述】:

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

例如,

template<typename T1> class node{

public:

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

};

以上产生如下编译错误:

错误:在 'typename' 之后需要一个限定名称

【问题讨论】:

  • 对于那些在使用reinterpret_cast时不知道将typename放在哪里的人:reinterpret_cast&lt;typename ClassA&lt;T&gt;&gt;(things_to_convert)

标签: c++ c++14 reinterpret-cast typename


【解决方案1】:

reinterpret_cast 返回一个,而不是一个类型。具体来说,它是一种表达方式。如果要获取表达式的类型,正确的工具是decltype

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

但是,因为 reinterpret_cast&lt;T&gt; 的结果是 T 类型的表达式,所以与以下内容相比,这真的没有意义:

using null_sp2node = shared_ptr<node<T1>>;

当然,既然reinterpret_cast&lt;shared_ptr&lt;node&lt;T1&gt;&gt;&gt;(NULL) 一开始就是不成立的,那真的没关系。您不能 reinterpret_cast 指向非指针类型的空指针常量(某些整数类型除外)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多