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在泛型编程中的实现。