繁体   English   中英

C++ 11 中 std::is_base_of 的逻辑

[英]Logic of std::is_base_of in C++ 11

在浏览一些 C++ 概念时,我偶然发现了 std::is_base_of 逻辑。

谷歌搜索逻辑产生了以下代码,但我无法理解。

有人可以向我解释它是如何工作的吗?

template<typename D, typename B>
class IsDerivedFromHelper
{
    class No { };
    class Yes { No no[3]; };

    static Yes Test( B* );
    static No Test( ... );
public:
    enum { Is = sizeof(Test(static_cast<D*>(0))) == sizeof(Yes) };

};


template <class C, class P> 
bool IsDerivedFrom() {
    return IsDerivedFromHelper<C, P>::Is;
}

BD的基类时,调用Test(static_cast<D*>(0))解析为Yes Test(B*) 否则,它会解析为No Test(...)

如果BD的基类,则sizeof(Test(static_cast<D*>(0)))值为sizeof(Yes) 否则,它等于sizeof(No)

YesNo被定义为sizeof(Yes)永远不会等于sizeof(No)

如果BD的基类,

sizeof(Test(static_cast<D*>(0))) == sizeof(Yes)

评估为true 否则它评估为false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM