2012-05-12 31 views
7

是否存在命令,如\deprecated,但要標記重寫的函數?標記重寫函數

對於已覆蓋的函數,Java有一個註釋@override。我想在C++中做同樣的事情,以便我可以看到我重寫的超類功能。文檔頁面最好還應該顯示所有繼承的類成員函數,但沒有顯式使用超類鏈接指向超類函數。

我知道有一種方法可以從超類方法複製文檔。但我不希望複製整個文檔。我只想知道,一個函數是繼承的。行爲應該與過時的選項類似,用條形標記這些舊功能。

+0

有一個['overload'](HTTP:// www.stack.nl/~dimitri/doxygen/commands.html#cmdoverload)命令。 – Chris

+1

@Chris:overloading!= overriding,請參閱http://stackoverflow.com/a/429236/79455 – rve

+0

@rve您說得對,我顯然沒有仔細閱讀這個問題。 – Chris

回答

7

每個被重寫的函數都會自動獲得它已被重新實現的通知。例如,派生類中的重寫函數會得到「從MyBaseClass重新實現」的通知。

它還在基類的文檔中發佈通知。有提及「重試在測試」

要顯示所有功能,包括繼承的功能,您可以將INLINE_INHERITED_MEMB設置爲YES。然後Doxygen將每個繼承但未被覆蓋的函數的文檔複製到派生類的文檔中。

例如,使用此源時:

class TestBase 
{ 
    public: 
     /** 
     * Base class function. 
     */ 
     virtual void function(); 

     /** 
     * Another function. 
     */ 
     virtual void another(); 
}; 

class Test: public TestBase 
{   
    public: 
     /** 
     * Overridden function. 
     */ 
     virtual void function(); 
}; 

和設置INLINE_INHERITED_MEMBYES將導致爲Derived類在下列文獻中:(配Doxygen的1.7.6)

會員功能文檔

virtual void TestBase::another ( ) [virtual, inherited]
另一個功能。

virtual void Test::function ( ) [virtual]
派生。
從TestBase重新實現。

我想這就是你要找的。

+0

你好,謝謝,這是一個很好的提示,但不是我的整個解決方案。如果我重寫自己的功能,沒關係,但如果我覆蓋例如一個qt函數,doxygen無法識別它被覆蓋。我也沒有得到括號中的繼承塊,但只是在消息中重新實現。沒關係,但我希望,我可以直接在成員列表概覽中看到重寫狀態。 – Theo

+0

稍遲,但您可以使用標記文件讓Doxygen瞭解別處記錄的類。如果你有一個用於QT的標籤文件,那麼(我認爲)它應該標記從QT繼承的函數。從來沒有嘗試過。 – rve

0

由於C++ 11可以使用倍率說明符:

class A { 
    virtual void jump() = 0; 
    void talk() {} 
}; 

class B: public A { 
    void jump() const override {...} // Error: B:: jump does Not overrides A:: jump (A::Jump is not const...) 
    void jump() override {...} // OK: B:: jump overrides A:: jump 
    void talk() override {...} // Error: A::talk is not virtual 
}; 

原件實施例和官方DOC:http://en.cppreference.com/w/cpp/language/override