當創建一個C++繼承結構,則必須定義成員函數在多個地方完全一樣: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,鼻翼:
class D: public B
{
#include "B_Interface.h" // B_Interface.h is a specially crafted .h file
}
這似乎有點缺憾?是嗎?有沒有更好的解決方案來避免雙重維護?
另外,也許這裏的解決方案是真正更好的工具來支持語言,如Visual Assist X?
編輯:假設派生類必須具有唯一的實現。
Boost庫實際上在某些部分做到了這一點,雖然不是用於繼承,只是爲了重用代碼。 – 2010-03-01 21:09:48
爲什麼不使用宏而不是include?重點在於性能明智的'#include'意味着當宏已經在符號表中時查找文件。 – 2010-03-02 08:23:10