2012-05-12 19 views
7

¿Existe un comando, como \deprecated, pero para marcar funciones anuladas?Marcar funciones anuladas

Java tiene una anotación @override para las funciones que ha anulado. Me gustaría hacer lo mismo en C++, para poder ver las funciones de superclase que he anulado. En el mejor de los casos, la página de documentación también debe mostrar todas las funciones de miembros de la clase, que son heredadas, pero no anuladas explícitamente con hipervínculos a las funciones de la superclase.

Sé que hay una manera de copiar la documentación del método de la superclase. Pero no quiero copiar todo el documento. Solo quiero saber que una función es heredada. El comportamiento debe ser similar a la opción obsoleta para marcar esas funciones antiguas con una barra.

+0

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

+1

@Chris: sobrecarga! = Anulación, ver http://stackoverflow.com/a/429236/79455 – rve

+0

@rve Tienes razón, obviamente no leí la pregunta lo suficiente. – Chris

Respuesta

7

Cada función anulada recibe automáticamente un aviso de que se ha vuelto a implementar. Por ejemplo, la función anulada en una clase derivada recibe el aviso "Reimplemented from MyBaseClass".

También pone un aviso en la documentación de la clase base. Se menciona "Reimplementado en prueba"

Para mostrar todas las funciones, incluidas las heredadas, puede establecer INLINE_INHERITED_MEMB en YES. Luego Doxygen copia la documentación de cada función heredada, pero no reemplazada, en la documentación de la clase derivada.

Por ejemplo, al utilizar esta fuente:

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

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

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

Y la creación INLINE_INHERITED_MEMB-YES dará lugar a la siguiente documentación para la clase Derived: (Con Doxygen 1.7.6)

miembro Documentación de función

virtual void TestBase::another ( ) [virtual, inherited]
Otra función.

virtual void Test::function ( ) [virtual]
Derivado.
Reimplementado desde TestBase.

Creo que esto es lo que estás buscando.

+0

Hola rve, gracias es un buen consejo, pero no es la solución completa para mí. Si anulo mis propias funciones, está bien, pero si anulo, p. una función qt, doxygen no reconoce que está anulada. Tampoco entrego el bloque heredado entre corchetes, sino solo un mensaje reimplementado. Está bien, pero me gustaría, podría ver el estado modificado directamente en la descripción general de la lista de miembros. – Theo

+0

Un poco tarde, pero puede usar los archivos de etiquetas para informar a Doxygen sobre las clases documentadas en otra parte. Si tiene un archivo de etiqueta para QT, entonces (creo) debería marcar las funciones heredadas de QT. Nunca lo intenté sin embargo. – rve

0

Desde C++ 11 puede utilizar la anulación especificador:

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

original Ejemplo y doc oficial: http://en.cppreference.com/w/cpp/language/override

Cuestiones relacionadas