Doxygen: пространство имен верхнего уровня - PullRequest
3 голосов
/ 25 июля 2011

При работе с библиотекой ABC естественно, что все имена включены в один и тот же верхний уровень namespace.Можно ли удалить верхний уровень namespace из class имен, но показать включенный namespaces?

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Нет такой опции внутри Doxygen.Тем не менее, вы можете использовать препроцессор, чтобы заставить его работать.

#ifndef DOXY_PARSER
    #define LIB_NAMESPACE_STARTS namespace lib_namespace { /##/
    #define LIB_NAMESPACE_ENDS } /##/
    #define LIB_NAMESPACE lib_namespace
#else
    #define LIB_NAMESPACE_STARTS /##/
    #define LIB_NAMESPACE_ENDS /##/
    #define LIB_NAMESPACE
#endif

Вы должны включить этот код в общий заголовок и установить предопределенный макрос DOXY_PARSER в опциях Doxygen.Этот обходной путь делает использование пространства имен библиотеки менее удобным, но это не так важно.

LIB_NAMESPACE_STARTS();
    namespace internal_namespace {
        struct Trololo {};
    }
    LIB_NAMESPACE::internal_namespace::Trololo T;
LIB_NAMESPACE_ENDS();
1 голос
/ 27 июня 2012

Существует общая проблема с предыдущим решением, оно недопустимо при использовании Qt. Процесс moc'ing не использует препроцессор, и пространство имен не используется (что приводит к ошибке времени компиляции).

Одним из возможных решений было бы использование #define QT_NAMESPACE lib_namespace, но оно переместило бы весь Qt в это пространство имен.

Следующее решение носит более общий характер (я сохранил название макроса для удобства):

#ifndef DOXY_PARSER
    #define LIB_NAMESPACE lib_namespace
    #define LIB_NAMESPACE_STARTS namespace LIB_NAMESPACE { /##/
    #if (defined MOCED_FILE)
        #define LIB_NAMESPACE_ENDS } using namespace LIB_NAMESPACE; /##/
    #else
        #define LIB_NAMESPACE_ENDS } /##/
    #endif
    #define USING_LIB_NAMESPACE using namespace LIB_NAMESPACE; /##/
#else
    #define LIB_NAMESPACE_STARTS /##/
    #define LIB_NAMESPACE_ENDS /##/
    #define LIB_NAMESPACE
    #define USING_LIB_NAMESPACE /##/
#endif

Где MOCED_FILE - это исключение для mocs. Если вы используете CMake, вы можете указать такую ​​опцию, используя:

QT4_WRAP_CPP(mocSources qt_file1.h qt_file2.h)
SET_SOURCE_FILES_PROPERTIES(${mocSources} PROPERTIES COMPILE_FLAGS "-DMOCED_FILE")
...