C++ is_base_of

2018-03-06  本文已影响74人  三木仔

在理解type_traits类型判断的时候,看到网上关于is_base_of的源码,自己C++水平有限,特别是模版,对其中的实现一直不理解。

以下记录个人思考的过程,方便自己或他人。

is_base_of 作用是 判断 Base 是否为 Derived 的基类。

其中的主要源码如下:

template<typename Base, typename Devied, bool = (is_class<Base>::value && is_class<Devied>::value)>
class is_base_of
{
    template<typename T> 
    static char helper(Devied, T);
    static int helper(Base, int);
    struct Conv
    {
        operator Devied();
        operator Base() const;
    };
public:
    static const bool value = sizeof(helper(Conv(), 0) == 1);
};

template<typename Base, typename Derived>
class is_base_of<Base, Derived, false>
{
public:
    static const bool value = is_same<Base, Derived>::value;
};

其中关于type_traits类型判断 请参考这个链接,里面有详细的实现。

  1. is_class 是type_traits中判断是否是类类型的函数模板,详细参考type_traits类型判断

  2. operator Devied() 是类型转换操作符,将类类型值转变为其他类型值的转换,在保留字 operator 之后跟着转换的目标类型,详细参考类型强制转换成员函数;

  3. 重点分析 value = sizeof(helper(Conv(), 0) == 1)

参考文章:
http://blog.csdn.net/hooked/article/details/3394720

上一篇 下一篇

猜你喜欢

热点阅读