题
当创建一个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,如果这就是你喜欢。)
不隶属于 StackOverflow