C++中的CRTP(Curiously Recurring Template Pattern)是一种模板编程技巧,它允许派生类继承基类的模板实现。CRTP在泛型编程中非常有用,因为它可以在编译时实现静态多态性。以下是一个简单的CRTP示例,展示了如何在泛型编程中使用CRTP:
#include// 基类模板 template class Base { public: void baseMethod() { static_cast (this)->derivedMethod(); } }; // 派生类模板 template class Derived : public Base > { public: void derivedMethod() { std::cout << "Derived class method called with type: " << typeid(T).name() << std::endl; } }; int main() { Derived d1; d1.baseMethod(); // 调用派生类的derivedMethod() Derived d2; d2.baseMethod(); // 调用派生类的derivedMethod() return 0; }
在这个例子中,我们定义了一个基类模板Base
,它接受一个类型参数Derived
。然后,我们定义了一个派生类模板Derived
,它继承自Base
并传递自身作为模板参数。这样,Base
就可以访问Derived
的成员函数。
在main
函数中,我们创建了两个Derived
类的实例,分别传递int
和double
类型参数。当我们调用baseMethod()
时,它会调用相应派生类的derivedMethod()
。这就是CRTP在泛型编程中的实现。