CRTP, C++的奇异递归模板

1.CRTP的优势:

通常的继承关系中,多态是通过虚函数实现的,但虚函数会带来一些运行时开销,因为它们需要通过虚函数表(vtable)进行动态分派。而 CRTP使用模板基类来实现多态行为, 则是在编译时就确定了派生类的方法,因此可以避免这种开销。

2.CRTP的基本结构:

CRTP 的核心思想是,让一个类派生自一个将自己作为模板参数的基类。具体结构如下:

template <typename Derived>
class Base {
public:
    void interface() {
        // 基类可以调用派生类的方法
        static_cast<Derived*>(this)->implementation();
    }
};

class Derived : public Base<Derived> {
public:
    void implementation() {
        std::cout << "Derived implementation" << std::endl;
    }
};
  1. 基类 Base 是一个模板类,它接受一个模板参数 Derived,该模板参数表示派生类。
  2. 派生类 Derived 继承自 Base<Derived>,将自身作为模板参数传递给基类。
  3. 基类中的方法(如 interface())可以通过 static_cast<Derived*>(this) 将基类的指针转换为派生类的指针,从而调用派生类的实现方法(如 implementation())。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值