我正在使用简单的克隆模式编写一些代码,如果我能够强制派生类覆盖该克隆模式,但保留使用我的基类的能力,我会喜欢它。(所以我不想将克隆方法声明为纯虚拟的。)
无论如何在编译器级别强制执行此限制?
我正在使用简单的克隆模式编写一些代码,如果我能够强制派生类覆盖该克隆模式,但保留使用我的基类的能力,我会喜欢它。(所以我不想将克隆方法声明为纯虚拟的。)
无论如何在编译器级别强制执行此限制?
不幸的是,没有办法在 C++ 中实现这一点。您不能强制在子类中重写非抽象方法。但是,我可能会注意到具体的基类在 C++ 中应该相当少见,您可能需要重新考虑您的设计。有了更多关于您的总体目标的信息,我们或许能够为您的精确需求提供更好的答案。
我接触 C++ 已经有一段时间了,但我记得你可以使用带有 body 的纯虚方法。
// in header
class YourBase {
public:
virtual Foo bar() = 0;
};
// in source
Foo YourBase::bar() {
// a default impl
}
这应该强制子类覆盖 bar(),同时在 YourBase 中留下一个可用的 bar() impl
不幸的是,您不能在编译时强制一个类覆盖具体基类的方法,但是您可以简单地assert
在每个clone
函数实现中将该类型是该实现所在的类的类型,
assert( typeid( *this ) == typeid( ThisClass ) );
然后运行一个测试来练习每个类的克隆功能。