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

Joe*_*der 3 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 */
Run Code Online (Sandbox Code Playgroud)

所以,这里显然有一些重复.如果B的接口很大,如果接口需要更改,则可能有许多地方需要更改.

一位同事用嵌入式巧妙创造的#includes,ala提出了一些诡计:

class D: public B
{
   #include "B_Interface.h"  // B_Interface.h is a specially crafted .h file
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

sbi*_*sbi 12

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

  • 同意 - 恕我直言和界面应该尽可能少地改变,所以如果这是一个痛苦,这是一件好事! (3认同)