【问题标题】:Doxygen: strip top level namespaceDoxygen:剥离顶级命名空间
【发布时间】:2011-07-25 04:36:41
【问题描述】:

使用库 ABC 时,所有名称都包含在同一顶级 namespace 中。是否可以从class 名称中删除顶级namespace,但显示封闭的namespaces

【问题讨论】:

    标签: c++ namespaces doxygen


    【解决方案1】:

    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_PARSER 宏。这种解决方法使库命名空间的使用不太方便,但它并不是那么重要。

    LIB_NAMESPACE_STARTS();
        namespace internal_namespace {
            struct Trololo {};
        }
        LIB_NAMESPACE::internal_namespace::Trololo T;
    LIB_NAMESPACE_ENDS();
    

    【讨论】:

      【解决方案2】:

      之前的解决方法有个普遍的问题,使用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")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 2012-10-18
        相关资源
        最近更新 更多