C++ 以下声明是什么意思?

C++ 以下声明是什么意思?,c++,crtp,C++,Crtp,我有一个类B继承自类A,但我不明白为什么类B以这种方式声明 class B : public A <B> { public: ... }; template <class T> class A { public: .... } 类A是一个模板类。因此,在继承时,B必须为模板参数T提供值,在本例中为“B”。但必须将A的类定义放在B之前,否则会出现编译错误。类A是一个模板类。因此,在继承时,B必须为模板参数T提供值,在本例中为“B”。但是您必须将A

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

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

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

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

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

正如PeterT已经指出的,这是最重要的。 它是一种在C++中实现静态多态性的方法,因为基类A对子类B及其内部类型和状态有了解。p> 例如,A中的逻辑可以返回正确类型的对象,这在动态多态性中是不可能的。CRTP允许将该逻辑移动到基类,在基类中,动态多态性需要派生类中的虚拟函数来处理适合于B的正确类型


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

正如彼得已经指出的,这是最重要的。 它是一种在C++中实现静态多态性的方法,因为基类A对子类B及其内部类型和状态有了解。p> 例如,A中的逻辑可以返回正确类型的对象,这在动态多态性中是不可能的。CRTP允许将该逻辑移动到基类,在基类中,动态多态性需要派生类中的虚拟函数来处理适合于B的正确类型


给出了更详细的解释。

您的问题似乎格式错误。您敢问什么是CRTP吗?我不知道什么是CRTP,以及我们为什么使用此模式声明类?谢谢您确实需要检查一个用例来理解它的原因。“孤立地说,这一切看起来都是非常抽象和假设的。”皮特我发现这回答了我的问题为什么。谢谢你的问题似乎格式错误。你敢问什么是?我不知道什么是CRTP,为什么我们使用这种模式来声明类?谢谢您确实需要检查一个用例来理解它的原因。“孤立地说,这一切看起来都是非常抽象和假设的。”皮特我发现这回答了我的问题为什么。谢谢这不能解释“为什么”,这就是问题所在,这不能解释“为什么”,这就是问题所在。