0

我正在使用简单的克隆模式编写一些代码,如果我能够强制派生类覆盖该克隆模式,但保留使用我的基类的能力,我会喜欢它。(所以我不想将克隆方法声明为纯虚拟的。)

无论如何在编译器级别强制执行此限制?

4

3 回答 3

4

不幸的是,没有办法在 C++ 中实现这一点。您不能强制在子类中重写非抽象方法。但是,我可能会注意到具体的基类在 C++ 中应该相当少见,您可能需要重新考虑您的设计。有了更多关于您的总体目标的信息,我们或许能够为您的精确需求提供更好的答案。

于 2012-09-28T02:32:46.027 回答
1

我接触 C++ 已经有一段时间了,但我记得你可以使用带有 body 的纯虚方法。

// in header
class YourBase {
public:
  virtual Foo bar() = 0;
};

// in source
Foo YourBase::bar() {
  // a default impl
}

这应该强制子类覆盖 bar(),同时在 YourBase 中留下一个可用的 bar() impl

于 2012-09-28T02:56:44.773 回答
1

不幸的是,您不能在编译时强制一个类覆盖具体基类的方法,但是您可以简单地assert在每个clone函数实现中将该类型是该实现所在的类的类型,

assert( typeid( *this ) == typeid( ThisClass ) );

然后运行一个测试来练习每个类的克隆功能。

于 2012-09-28T02:59:14.563 回答