我有一个B类继承自类A,但我不明白为什么B类以这种方式声明。以下声明是什么意思?
class B : public A <B>
{
public:
...
};
template <class T>
class A
{
public:
....
}
我有一个B类继承自类A,但我不明白为什么B类以这种方式声明。以下声明是什么意思?
class B : public A <B>
{
public:
...
};
template <class T>
class A
{
public:
....
}
正如PeterT指出的那样,这是curiously recurring template pattern (CRTP)。 这是一种在C++中实现静态多态性的方法,因为基类A
掌握子类B
及其(内部)类型和状态的知识。
例如,A
中的逻辑可以返回对动态多态性来说不可能的正确类型的对象。 CRTP允许将该逻辑移动到基类,动态多态性需要派生类中的虚函数来处理适合B
的正确类型。
给出了更详细的解释here。
class A是一个模板类。因此,当继承时,B必须为templae参数T提供价值,在这种情况下它是'B'。但是你必须在B之前放置A的类定义,否则会出现编译错误。
这并不能解释“为什么”,那就是问题所在。 –
你的问题似乎是格式错误 – Massa
你在问什么[CRTP](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)是什么? – PeterT
我不知道CRTP是什么,为什么我们使用这种模式来声明类?谢谢! – Lei