You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类层次中实现返回*this的协变返回类型方法,如何避免代码重复?

解决C++类层次中bar()方法代码重复的问题

你可以用轻量CRTP混入类来消除重复代码,实现非常简洁,完全不需要复杂的CRTP结构:

步骤1:定义CRTP混入类

这个模板类封装了bar()的通用逻辑,通过模板参数获取子类类型,自动推导返回值:

template <typename Derived>
class BarMixin {
public:
    Derived& bar() & {
        // 调用基类A的foo(),通过子类转换确保访问权限
        static_cast<Derived*>(this)->A::foo();
        return *static_cast<Derived*>(this);
    }
};

步骤2:改造原有类层次

让每个需要bar()方法的子类,多继承对应的BarMixin实例(模板参数为子类自身):

class A {
protected:
    void foo() { /* 此处为A::foo的原有实现 */ }
};

// B继承A和BarMixin<B>,自动获得bar()
class B : public A, public BarMixin<B> {};

// C同理
class C : public A, public BarMixin<C> {};

// D继承B和BarMixin<D>,自动获得bar()
class D : public B, public BarMixin<D> {};

说明

  • 混入类BarMixin仅封装bar()的通用逻辑,不会干扰原有类层次的结构。
  • bar()的左值限定符&保留,完全符合你规避右值问题的要求。
  • 所有子类无需重复编写bar()的函数体,仅通过继承混入类即可获得功能,彻底消除代码重复。

内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:50:45