C ++:避免​​继承层次结构中的双重维护

时间:2010-03-01 20:56:57

标签: c++ dry base-class

创建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的接口很大,如果接口需要更改,则可能有很多地方需要更改。

一位同事建议使用嵌入式巧妙创建的#includes,ala:

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

这看起来有点笨拙?是吗?有没有更好的解决方案来避免双重维护?

此外,这里的解决方案可能是支持语言的更好工具,例如Visual Assist X?

编辑:假设派生类必须具有唯一的实现。

5 个答案:

答案 0 :(得分:12)

实际上,更改界面的最大问题通常是使用它的所有代码,而不是实现它的代码。如果为实施者更改它很容易,那么可能会让用户的生活更加艰难。

答案 1 :(得分:4)

改变广泛使用的界面是痛苦的不是一个错误;这是一个特色。

答案 2 :(得分:4)

  

此外,这里的解决方案可能是支持语言的更好工具,例如Visual Assist X?

完全。更改方法签名是key feature重构工具。

答案 3 :(得分:1)

如果必须使用某些默认行为反复实现它们,那么它们可能只是虚拟的,而不是纯虚拟的。

答案 4 :(得分:1)

不是以另一种方式使用预处理器,而是不应该使用它,我会尝试使用我的编辑器(或者IDE,如果这是你想要的那样。)