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