C++ Doxygen:剥离顶级命名空间
使用库ABC时,所有名称都包含在同一顶级C++ Doxygen:剥离顶级命名空间,c++,namespaces,doxygen,C++,Namespaces,Doxygen,使用库ABC时,所有名称都包含在同一顶级命名空间中是很自然的。是否可以从类名称中删除顶级名称空间,但显示包含的名称空间?Doxygen内部没有此类选项。仍然可以使用预处理器使其工作 #ifndef DOXY_PARSER #define LIB_NAMESPACE_STARTS namespace lib_namespace { /##/ #define LIB_NAMESPACE_ENDS } /##/ #define LIB_NAMESPACE lib_namespa
命名空间中是很自然的。是否可以从类
名称中删除顶级名称空间
,但显示包含的名称空间
?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
您应该将此代码包含到一些公共头中,并在Doxygen选项中设置预定义的DOXY\u解析器
宏。这种解决方法使库名称空间的使用变得不那么方便,但它并不是那么重要
LIB_NAMESPACE_STARTS();
namespace internal_namespace {
struct Trololo {};
}
LIB_NAMESPACE::internal_namespace::Trololo T;
LIB_NAMESPACE_ENDS();
以前的解决方案存在一个一般性问题,使用Qt时无效。moc'ing进程不使用预处理器,也不使用名称空间(导致编译时错误)
一种可能的解决方案是使用#define QT_NAMESPACE lib_NAMESPACE
,但它会将整个QT移动到该名称空间
下一个解决方案更通用(为了方便起见,我保留了宏的名称):
其中,MOCED_文件
是mocs的专用定义。如果您使用的是CMake,则可以使用以下命令指定此选项:
QT4_WRAP_CPP(mocSources qt_file1.h qt_file2.h)
SET_SOURCE_FILES_PROPERTIES(${mocSources} PROPERTIES COMPILE_FLAGS "-DMOCED_FILE")
QT4_WRAP_CPP(mocSources qt_file1.h qt_file2.h)
SET_SOURCE_FILES_PROPERTIES(${mocSources} PROPERTIES COMPILE_FLAGS "-DMOCED_FILE")