2012-05-12 14 views
7

Esiste un comando, come \deprecated, ma per contrassegnare le funzioni sovrascritte?Contrassegna le funzioni sovrascritte

Java ha un'annotazione @override per le funzioni sovrascritte. Mi piacerebbe fare lo stesso in C++, in modo da poter vedere le funzioni della superclasse che ho sovrascritto. Nella migliore delle ipotesi, la pagina della documentazione dovrebbe mostrare tutte le funzioni dei membri della classe, che sono ereditate, ma non esplicitamente sovrascritte con i collegamenti ipertestuali alle funzioni della superclasse.

So che esiste un modo per copiare la documentazione dal metodo superclasse. Ma non voglio che l'intero documento venga copiato. Voglio solo sapere, che una funzione è ereditata. Il comportamento dovrebbe essere simile all'opzione deprecata per contrassegnare quelle vecchie funzioni con una barra.

+0

C'è un [ 'overload'] (http: // www.stack.nl/~dimitri/doxygen/commands.html#cmdoverload) comando. – Chris

+1

@Chris: overloading! = Override, vedi http://stackoverflow.com/a/429236/79455 – rve

+0

@ rve Hai ragione, ovviamente non ho letto abbastanza attentamente la domanda. – Chris

risposta

7

Ogni funzione ignorata riceve automaticamente un avviso che è stato reimplementato. Ad esempio, la funzione sostituita in una classe derivata ottiene l'avviso "Reimplementato da MyBaseClass."

Mette anche un avviso nella documentazione della classe base. C'è menzioni "Reimplemented in Test"

Per mostrare tutte le funzioni, incluse le funzioni ereditate, è possibile impostare INLINE_INHERITED_MEMB su YES. Quindi Doxygen copia la documentazione di ogni funzione ereditata, ma non sovrascritta, nella documentazione della classe derivata.

Ad esempio, quando si utilizza questa fonte:

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

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

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

e impostando INLINE_INHERITED_MEMB-YES effettuerà la seguente documentazione per la classe Derived: (con Doxygen 1.7.6)

Stati Funzione Documentazione

virtual void TestBase::another ( ) [virtual, inherited]
Un'altra funzione.

virtual void Test::function ( ) [virtual]
Derivato.
Reimplementato da TestBase.

Penso che questo sia quello che stai cercando.

+0

Ciao, grazie, è un buon consiglio, ma non l'intera soluzione per me. Se eseguo l'override delle mie funzioni, va bene, ma se eseguo l'override ad es. una funzione qt, doxygen non riconosce che è sovrascritta. Inoltre non ottengo il blocco ereditato tra parentesi, ma solo un reimplementato nel messaggio. Va bene, ma spero, potrei vedere lo stato di override direttamente nella panoramica dell'elenco dei membri. – Theo

+0

Un po 'tardi, ma è possibile utilizzare i file di tag per consentire a Doxygen di conoscere le classi documentate altrove. Se si dispone di un file di tag per QT, quindi (penso) dovrebbe contrassegnare le funzioni ereditate da QT. Non ho mai provato però. – rve

0

Dal C++ 11 è possibile utilizzare il di override identificatore:

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

originale Esempio e doc ufficiale: http://en.cppreference.com/w/cpp/language/override

Problemi correlati