如何自动为子类生成重写函数?C++类继承场景优化问询
解决方案:用CRTP模板中间类自动实现纯虚方法
实现步骤
- 重构抽象基类A:保留纯虚
abort方法,添加虚析构保证多态安全
class A { public: virtual void abort() = 0; virtual ~A() = default; };
- 实现模板中间类A_CRTP:继承A,利用CRTP(奇异递归模板模式)获取子类类型,在这个类里统一实现
abort方法,调用C的模板接口
// 假设单例C的已有实现 class C { public: static C& getInstance() { static C instance; return instance; } template<typename T> void doSomething() { // 针对T类型的定制逻辑 } }; template<typename Derived> class A_CRTP : public A { public: void abort() override { C::getInstance().doSomething<Derived>(); } };
- 子类继承模板中间类:所有需要自动拥有
abort实现的子类,直接继承A_CRTP<自身类名>,无需手动重写abort
class B : public A_CRTP<B> { // 无需编写abort方法,自动继承A_CRTP中的实现 }; // 其他子类同理 class B1 : public A_CRTP<B1> {}; class B2 : public A_CRTP<B2> {};
额外说明
- 如果某个子类需要自定义
abort逻辑,直接在子类中重写该方法即可,会覆盖A_CRTP中的默认实现 - 这种方式完全避免了重复编写
abort的样板代码,所有继承A_CRTP的子类都会自动获得统一的abort实现
内容的提问来源于stack exchange,提问作者AuBee
相关产品推荐
相关产品推荐

