2015-05-12 41 views
1

我正在使用doxygen來記錄C++庫。如何通過幾個C++類來「幹」常見方法的常用文檔?

比方說,我有幾個類A,B,C等,它們共享一套共同的方法A::m1(), B::m1(), ...等等。這些方法基本上在每個類中都做同樣的事情。

我想要這些常用方法的單個實現。

另一種方法是類(A,B,C等)繼承具有通用方法的公共類。然而,根據我的測量結果,這種方法與多繼承相結合意味着性能的輕微犧牲。事實上,我的一些類繼承了其他類,所以多繼承是可以肯定的。

因此,爲了「分解」我將它們寫入宏大的常用方法。像這樣:

define COMMON_METHODS() \ 
void m1() { ..- } \ 
void m2() { ... \ 

然後,在每個類中,我把這個宏。

我知道這可能不是最好的技術(雖然在性能上是非常好的)。

現在,我還想爲常用方法編寫單個文檔,並且(文檔)由doxygen管理和生成。

不幸的是,我無法找到或設想一些方法(在doxygen的情況下)寫一次文檔。

所以我會很感激,如果有人可以提供一些技巧或想法讓我寫一次文檔。

問候

+2

一個選項:受到輕微的性能打擊以換取更好的代碼可維護性。 –

+1

CRTP可以幫助您保持常用方法的實施。 – jxh

回答

2

如果使用COMMON_METHODS自動的在一堆類的一些方法的創建,你可能要考慮封裝在一個模板的方法來代替,並使用CRTP。

template <typename C> 
class CommonMethods { 
    C * me() { return static_cast<C *>(this); } 
protected: 
    // ... common data members can go here ... 
public: 
    void m1() { 
     //... use me() if needed ... 
    } 
    //... 
}; 

class A : public CommonMethods<A>, //... 
{ 
    friend class CommonMethods<A>; 
    //... 
}; 

這與所有繼承自通用接口的類不同。這種技術沒有虛擬接口查找懲罰。

+0

非常感謝您的回答@jxh。 這聽起來是一個完美的解決方案,以doxygen爲條件,能夠識別所有內容並生成繼承的文檔;我猜是的;我會檢查。無論如何,它看起來比宏觀方法好得多。再次感謝。 現在,我想知道是否有可能幹燥一個共同的構造函數。也就是說,假設通用類共享一個具有相同實現的通用構造函數。有什麼辦法可以通過CRTP? (或其他方式) – lrleon

+0

除非派生對象的構造函數顯式調用不同的構造函數,否則將調用基類的默認構造函數。 – jxh

+1

如果在doxygen配置中將INHERIT_DOCS設置爲yes,則將複製基類文檔。 – jxh