如何在调用仅基类实现、派生类未实现的函数时触发编译警告或错误?
C++20 部分特性实现的接口类设计问题
场景
- 基于
C++20标准。 - 存在作为接口的
Base类,定义了所有可用特性(成员函数);同时有多个派生类,这些派生类可能仅实现其中部分特性,所有函数均为虚函数。 - 部分函数在所有派生类中的实现完全相同。
- 成员函数可能存在重载。
- 可通过
SFINAE或concept静态检查某Derived类是否支持某个函数。
需求
- 调用派生类未实现的函数时,应触发编译警告或错误。
- 随着特性和派生类数量增加,新增时无需进行过多修改。
- 派生类需能够转换为基类。
- 对于所有派生类实现完全相同的函数,无需进行过多处理。
现有非完美解决方案
- 在
Base类中实现所有特性,函数内部抛出错误;在Derived类中使用using将该函数置于私有域。缺点:新增特性时需修改所有类,若遗漏则无警告。 - 在
Base类中使用纯虚函数,并在每个Derived类中实现所有特性。缺点:对于派生类不需要的特性,需编写大量重复的抛出错误的实现代码。
更新
关于上述第二种方案中“大量重复实现”的问题,我制作了一个代码示例来展示这种冗余性。
内容的提问来源于stack exchange,提问作者edison Chen
相关产品推荐
相关产品推荐

