温馨提示×

c++ crtp如何实现泛型编程

c++
小樊
82
2024-11-23 16:41:27
栏目: 编程语言

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类的实例,分别传递intdouble类型参数。当我们调用baseMethod()时,它会调用相应派生类的derivedMethod()。这就是CRTP在泛型编程中的实现。

0