为什么我从CRTP函数派生出来的?

时间:2015-07-16 20:08:00

标签: c++ c++11

我正在尝试编写一个函数来检查类是否派生自基类。基类是遵循奇怪的递归模板模式的基类,即它定义如下:

template<class Derived>
class Base{

派生类的派生如下:

class Derived: Base<Derived>{

为了检查一个类是否以这种方式派生,我写了这个检查器:

template<class T>
constexpr bool basedOn(){
    return std::is_base_of<Base<T>,T>::value;
}

它有效!我很惊讶。除非它直接来自Base,否则似乎没有任何回报。它为什么有效?使用CRTP派生的类的完整类型是什么?

1 个答案:

答案 0 :(得分:2)

完整类型的Derived只是Derived。但它确实继承了Base<Derived>类型,就像你定义它一样。