2012-05-12 11 views
7

Czy istnieje polecenie, takie jak \deprecated, ale w celu zaznaczenia zastąpionych funkcji?Zaznacz zastępowane funkcje

Java ma adnotację @override dla funkcji, które zastąpiłeś. Chciałbym zrobić to samo w C++, aby móc zobaczyć funkcje nadklasy, które nadpisałem. W najlepszym przypadku strona dokumentacji powinna również pokazywać wszystkie funkcje należące do klasy, które są dziedziczone, ale nie są jawnie nadpisywane hiperłączami do funkcji nadklasy.

Wiem, że istnieje sposób na kopiowanie dokumentacji z metody nadklasy. Ale nie chcę kopiować całego dokumentu. Chcę tylko wiedzieć, że funkcja jest dziedziczona. Zachowanie powinno być podobne do wycofanej opcji oznaczania tych starych funkcji za pomocą paska.

+0

istnieje [ 'overload'] (http: // www.stack.nl/~dimitri/doxygen/commands.html#cmdoverload) command. – Chris

+1

@Chris: przeciążenie! = Przesłonięcie, zobacz http://stackoverflow.com/a/429236/79455 – rve

+0

@rve Masz rację, oczywiście nie czytałem dokładnie tego pytania. – Chris

Odpowiedz

7

Każda nadpisana funkcja automatycznie otrzymuje powiadomienie, że została ponownie zaimplementowana. Na przykład zastąpiona funkcja w klasie pochodnej otrzymuje powiadomienie "Reimplemented from MyBaseClass."

Umieszcza również zawiadomienie w dokumentacji klasy bazowej. Istnieją wzmianki "Reimplemented in Test"

Aby wyświetlić wszystkie funkcje, w tym funkcje dziedziczone, można ustawić INLINE_INHERITED_MEMB na YES. Następnie Doxygen kopiuje dokumentację każdej odziedziczonej, ale nie zastępowanej, funkcji do dokumentacji klasy pochodnej.

Na przykład, podczas korzystania z tego źródła:

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

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

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

i ustawienie INLINE_INHERITED_MEMB do YES spowoduje następującej dokumentacji dla klasy Derived: (Z Doxygen 1.7.6)

państwa Funkcja Dokumentacja

virtual void TestBase::another ( ) [virtual, inherited]
Inna funkcja.

virtual void Test::function ( ) [virtual]
Pochodzenie.
Reimplemented z TestBase.

Myślę, że to jest to, czego szukasz.

+0

Cześć, dziękuję, to dobra wskazówka, ale nie dla mnie całe rozwiązanie. Jeśli nadpisuję swoje własne funkcje, to jest OK, ale jeśli nadpisam np. funkcja qt, doxygen nie rozpoznaje, że została przekroczona. Również nie dostaję dziedziczonego bloku w nawiasach, ale po prostu reimplementowany w wiadomości. W porządku, ale chciałbym, aby zobaczyłem status przesłaniania bezpośrednio w przeglądzie listy członków. – Theo

+0

Trochę za późno, ale możesz używać plików znaczników, aby powiadomić Doxygen o klasach udokumentowanych gdzie indziej. Jeśli masz plik znaczników dla QT, to (jak sądzę) powinien oznaczać funkcje odziedziczone po QT. Nigdy jednak tego nie próbowałem. – rve

0

Od C++ 11 można użyć override specyfikator:

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 
}; 

oryginalny przykład i oficjalnego dokumentu: http://en.cppreference.com/w/cpp/language/override