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()
,以實現多態行為。