2012-08-07 14 views
8

Mi pregunta está relacionada con cómo comentar typedef en la clase de plantilla con Doxygen. Voy a dar un ejemplo para ilustrar mi pregunta:typedef en clase de plantilla con Doxygen (C++)

namespace fundamental 
    { 
    /** 
    * Basic function 
    */ 
    template <typename T> 
    class Base 
    { 
    public: 
     T x; ///< x coordinate 
     T y; ///< y coordinate 
    }; 
    typedef Base<float> Coordinate; ///< Point coordinate class 
    } 

Después de usar Doxygen para procesar los códigos anteriores, puedo obtener una página HTML para mostrar la definición de la clase Base. Sin embargo, para la clase typedef Coordinate, no aparecerá en la misma página con Base. De hecho, todos los tipos typedef se enumeran en la página de espacio de nombres fundamental junto con todas las clases en este espacio de nombres. Me preguntaba si es posible mostrar la clase Coordinate en la página Base HTML. Al hacerlo, el vínculo entre Base y Coordinate se hará mucho más cercano. ¡Gracias!

Respuesta

5

El typedef es parte de un espacio de nombres, por lo que debe documentar la espacio de nombres para que aparezca, es decir:

/// documentation for the namespace 
namespace fundamental 
{ 
    ... 
    typedef Base<float> Coordinate; ///< Point coordinate class 
} 

otra posibilidad es utilizar @relates pero esto hará que el miembro bajo Funciones Relacionadas de la clase Base:

/// @relates Base 
/// Point coordinate class 
typedef Base<float> Coordinate; 

puede cambiar este título a, por ejemplo miembros relacionados mediante la creación de un archivo de diseño utilizando doxygen -l y luego la edición de los dos ocurrencias del elemento related en el DoxygenLayout.xml generó como sigue:

<related title="Related Members"/> 
3

In the manual leí lo siguiente:

Vamos a repetir que, debido a que a menudo se pasa por alto: para documentar los objetos globales (funciones, typedefs, enumeración, macros, etc.), debe documentar el archivo en el que se definen . En otras palabras, debe haber al menos un

/*! \file */ o una línea /** @file */ en este archivo.

+0

Lo he intentado pero parece que no funciona. – feelfree

2

Existe el comando Ver también (@sa), útil para generar referencias cruzadas con otras entidades.

1

También puede usar el /sa command para colocar manualmente una referencia en la página Base.

namespace fundamental 
{ 
    /** 
    * Basic function 
    * /sa Coordinate 
    */ 
    template <typename T> 
    class Base 
    { 
    public: 
    T x; ///< x coordinate 
    T y; ///< y coordinate 
    }; 
    typedef Base<float> Coordinate; ///< Point coordinate class 
} 
0

Las otras respuestas van a trabajar, pero si su typedef está tan estrechamente ligada a la clase Base que desea que aparezcan en la misma página Doxygen, es posible que desee considerar la definición de un nuevo namespace (dentro de Fundamental) que solo incluirá Base y su typedef. Entonces, doxygen generará una página para que namespace que incluirá Base y su typedef.

Definición de una documentación file va a hacer lo mismo, pero esto puede ser un registro más diseño ical para su código.

0

Hay otras dos soluciones a este problema. Puede definir grupos usando la palabra clave @defgroup, y agrupar la clase y, y escribir type type en un módulo. La otra solución es usar @relates

Cuestiones relacionadas