2012-08-28 10 views
5

Estoy usando Doxygen para documentar algo de mi código. Tengo una función que utiliza un argumento por defecto, que se especifica en el encabezado es decir:Doxygen que repite las funciones de C++ con los argumentos predeterminados

unsigned int CountColumns(const std::string&,const std::string& delim=""); 

y la aplicación correspondiente en el archivo de origen como:

unsigned int CountColumns(const string& input,const string& delim) 
{ 
    ... 
} 

Cuando uso Doxygen para generar mi documentación, CountColumns tiene dos entradas - una que incluye el valor por defecto, y un sin:

unsigned int CountColumns (const string &input, const string &delim) 
unsigned int CountColumns (const std::string &, const std::string &delim="") 

¿Cómo se puede evitar esto? No quiero que las definiciones de funciones múltiples llenen mi documentación.

EDITAR: Como también he mencionado en mi respuesta a continuación, el problema parece deberse al hecho de que el archivo de encabezado utiliza 'std :: string' en los argumentos, mientras que el archivo de origen incluye un 'usando std :: cadena 'declaración y luego utiliza' cadena 'en los argumentos. Si alterno la definición de la función para usar 'std :: string' en el archivo fuente también, Doxygen reconoce que es la misma función que declaró en el encabezado.

+0

¿Está ejecutando doxygen para documentar la implementación? –

+0

Le pido que incluya archivos fuente para que obtenga enlaces directos de mi documentación al código fuente en formato html, así como para documentar qué funciones hacen referencia a otras. ¿Es eso lo que quieres decir? (Lo siento, todavía estoy aprendiendo las opciones de doxygen). Sin embargo, tengo la opción "INLINE_SOURCES" establecida en NO. – Wheels2050

Respuesta

4

Sugiero establecer BUILTIN_STL_SUPPORT en YES en su archivo de configuración, por lo que doxygen sabe que la cadena es una clase definida en el estándar espacio de nombres

+0

Genial, gracias por eso - me había perdido de ver esa opción en el Doxyfile. ¡Funciona perfectamente! – Wheels2050

0

Bien, ¿qué hay de excluir las funciones adicionales de la documentación?

Esto es de la Doxygen FAQ,

"¿Cómo puedo hacer doxygen ignorar algún fragmento de código?

La manera nueva y más sencilla es añadir un bloque de comentario con un comando \cond al comienzo y uno . bloque de comentario con un comando \endcond en el extremo de la pieza de código que debe ser ignorado esto debe estar dentro del mismo archivo, por supuesto

Pero también se puede utilizar preprocesador de Doxygen para esto:. Si pones

#ifndef DOXYGEN_SHOULD_SKIP_THIS 

    /* code that must be skipped by Doxygen */ 

#endif /* DOXYGEN_SHOULD_SKIP_THIS */ 
around the blocks that should be hidden and put: 

    PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS 
in the config file then all blocks should be skipped by Doxygen as long as 

PREPROCESSING = YES. "

+0

. Había pensado que habría una manera más limpia y más elegante de hacerlo: no quiero tener que recurrir a omitir manualmente trozos de código si puede ser ayudado. – Wheels2050

+0

hay 2 formas de mostrar allí, preprocesador o usar el comando \ cond y \ endcond, creo que estás buscando el 2do. – MimiEAM

2

El problema parece deberse al hecho de que el archivo de encabezado usa 'std :: string' en los argumentos, mientras que el archivo fuente incluye una instrucción 'using std :: string' y luego usa 'string 'en los argumentos. Si alterno la definición de la función para usar' std :: string 'en el archivo fuente también, Doxygen reconoce que es la misma función que declaró en el encabezado.

Aunque no es ideal, es un solución que funciona y no es demasiado difícil de manejar.

Cuestiones relacionadas