以下声明是什么意思

What does the following declarations mean?

本文关键字:意思 是什么 声明      更新时间:2023-10-16

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

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

正如PeterT已经指出的,这是一个奇怪的重复模板模式(CRTP(。这是一种在C++中实现静态多态性的方法,因为基类A了解子类B及其(内部(类型和状态。

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

这里给出了更详细的解释。

类A是一个模板类。因此,在继承时,B必须为templae参数T提供值,在本例中为"B"。但您必须将A的类定义放在B之前,否则将出现编译错误。