以下声明是什么意思?

时间:2014-04-30 20:28:46

标签: c++ crtp

我有一个继承自A类的B类,但我不明白为什么B类以这种方式声明。

class B : public A <B>
{
public:
    ...
};

template <class T>
class A
{
public:
        ....
}

2 个答案:

答案 0 :(得分:4)

正如PeterT已经指出的那样,这是curiously recurring template pattern (CRTP)。 这是一种在C ++中实现静态多态的方法,因为基类A具有关于子类B及其(内部)类型和状态的知识。

例如,A中的逻辑可以返回正确类型的对象,这是动态多态无法实现的。 CRTP允许将该逻辑移动到基类,其中动态多态性需要派生类中的虚函数来处理适合B的正确类型。

更详细的解释是here

答案 1 :(得分:0)

A类是模板类。因此,在继承时,B必须为模板参数T提供值,在这种情况下,它是“B&#39;”。但是你必须在B之前放置A的类定义,否则会出现编译错误。