C++中的CRTP(Curiously Recurring Template Pattern)是一種模板編程技巧,它允許派生類繼承基類的模板實現。CRTP在泛型編程中非常有用,因為它可以在編譯時實現靜態多態性。以下是一個簡單的CRTP示例,展示了如何在泛型編程中使用CRTP:
#include <iostream>
// 基類模板
template <typename Derived>
class Base {
public:
void baseMethod() {
static_cast<Derived*>(this)->derivedMethod();
}
};
// 派生類模板
template <typename T>
class Derived : public Base<Derived<T>> {
public:
void derivedMethod() {
std::cout << "Derived class method called with type: " << typeid(T).name() << std::endl;
}
};
int main() {
Derived<int> d1;
d1.baseMethod(); // 調用派生類的derivedMethod()
Derived<double> d2;
d2.baseMethod(); // 調用派生類的derivedMethod()
return 0;
}
在這個例子中,我們定義了一個基類模板Base
,它接受一個類型參數Derived
。然后,我們定義了一個派生類模板Derived
,它繼承自Base
并傳遞自身作為模板參數。這樣,Base
就可以訪問Derived
的成員函數。
在main
函數中,我們創建了兩個Derived
類的實例,分別傳遞int
和double
類型參數。當我們調用baseMethod()
時,它會調用相應派生類的derivedMethod()
。這就是CRTP在泛型編程中的實現。