如何让Doxygen在Derived类方法签名中忽略Base类的提及?
问题描述
C++类定义
namespace detail{ template<class T> class Base{ /// @brief A foo method void foo(){} }; } /// @brief A derived class template<class T> class Derived : public Base<T> {};
Doxygen CMake配置
set(DOXYGEN_GENERATE_TREEVIEW YES) set(DOXYGEN_HTML_HEADER "header.html") set(DOXYGEN_COLLABORATION_GRAPH NO) set(DOXYGEN_CLASS_GRAPH NO) set(DOXYGEN_EXTRACT_PRIVATE NO) #set(DOXYGEN_EXCLUDE_SYMBOLS "detail") set(DOXYGEN_EXTRACT_ALL NO) set(DOXYGEN_INHERIT_DOCS YES) set(DOXYGEN_INLINE_INHERITED_MEMB YES) set(DOXYGEN_USE_MATHJAX YES) set(DOXYGEN_WARN_IF_UNDOCUMENTED NO) set(DOXYGEN_HTML_COLORSTYLE LIGHT) set(DOXYGEN_LAYOUT_FILE "DoxygenLayout.xml") set(DOXYGEN_FULL_PATH_NAME YES) set(DOXYGEN_STRIP_FROM_INC_PATH "../src/include")
当前使用Doxygen 1.9.5,在Derived类的方法详细描述中,继承的函数会显示完整的基类作用域签名(如void detail::Base<T>::foo()),由于项目中存在多层嵌套命名空间和复杂模板参数,签名显得过于冗长,希望能让Doxygen在Derived类的方法签名中去掉基类相关提及。
解决方案
可以通过以下几种方式实现需求:
调整Doxygen全局配置
启用DOXYGEN_SHORT_NAMES参数,该参数会全局简化符号显示名称,减少冗余的命名空间和基类信息:set(DOXYGEN_SHORT_NAMES YES)注意:此参数会改变所有类、函数的显示名称,若仅需针对继承方法调整,建议结合其他方式。
手动声明并复用基类方法文档
在Derived类中通过using声明引入基类方法,配合@copydoc复用基类文档,此时Doxygen会以Derived<T>::foo()的形式显示签名:/// @brief A derived class template<class T> class Derived : public Base<T> { /// @name 继承方法 /// @{ /** @copydoc detail::Base<T>::foo() */ using Base<T>::foo; /// @} };排除内部命名空间文档
如果detail是内部实现命名空间,取消CMake配置中DOXYGEN_EXCLUDE_SYMBOLS "detail"的注释,让Doxygen不解析该命名空间的文档,此时继承方法会直接显示为Derived<T>::foo(),同时不会生成detail命名空间的相关文档。自定义HTML样式隐藏基类前缀
结合已配置的header.html,添加自定义CSS隐藏基类作用域部分:.inheritHeader { display: none; }这种方式属于前端渲染层面的修改,需要提前熟悉Doxygen生成的HTML结构。
内容的提问来源于stack exchange,提问作者WaterFox
相关产品推荐
相关产品推荐

