当创建一个C ++继承结构,则必须定义成员函数完全相同的在多个地方:

如果B是一个抽象基类,和d,E,和F从B中的所有继承,可能有这样的:

class B
{
   virtual func A( ... params ) = 0;
};

class D : public B
{
   func A( ... params );
};

/* ... etc... similar implementations for E and F */

那么,显然这是一些重复。如果接口到B大,你可能有很多地方如果接口需求变化而变化。

一个同事提出了一些诡计具有嵌入式狡猾创建#包括,丙氨酸:

class D: public B
{
   #include "B_Interface.h"  // B_Interface.h is a specially crafted .h file
}

这似乎有点缺憾?是吗?有没有更好的解决办法,以避免双重维护?

此外,也许这里的解决方案是真正更好的工具来支持的语言,如Visual协助X?

编辑:假设派生类必须具有唯一的实施方式

有帮助吗?

解决方案

实际上,与改变接口的最大问题通常是所有用途的代码它,而不是代码实现它。如果它很容易改变它的实施者,它很可能使生活困难的用户。

其他提示

,它的痛苦改变广泛使用的接口不是一个错误;这是一个特征。

  

此外,也许这里的解决方案是真正更好的工具来支持的语言,如Visual协助X?

完全。变更方法的签名是重构的工具的一个键功能

如果你有一些默认行为,一遍又一遍地实现它们,那么也许他们应该是虚拟的,而不是纯粹的虚拟。

除了使用预处理的又一方式,它不应该被用来我会尽我的编辑器(或者IDE,如果这就是你喜欢。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top