C++中的CRTP(Curiously Recurring Template Pattern,好奇递归模板模式)是一种强大的编程技巧,它允许一个类继承另一个类,并在派生类中以模板的形式调用基类
CRTP的工作原理如下:
CRTP的优点:
CRTP的示例:
#include <iostream>
// 基类
template <typename T>
class Base {
public:
void baseFunction() {
std::cout << "Base function called" << std::endl;
}
};
// 派生类
class Derived : public Base<Derived> {
public:
void derivedFunction() {
std::cout << "Derived function called" << std::endl;
}
};
int main() {
Derived d;
d.baseFunction(); // 调用基类的函数
d.derivedFunction(); // 调用派生类的函数
return 0;
}
在这个示例中,Base
是一个基类,它定义了一个模板参数T
,表示派生类的类型。Derived
是一个派生类,它以模板参数T
指定其基类类型为Derived
。这样,Derived
就可以访问Base
中定义的静态成员函数baseFunction()
。同时,Derived
还可以覆盖Base
中的虚函数baseFunction()
,以实现多态行为。