如何让Doxygen生成的文档显示类的默认构造函数?
问题描述
我在用Doxygen 1.8.16生成类文档时碰到个小坑:下面这个类A的无参构造明明加了@brief注释,但生成的文档里“Constructor & Destructor Documentation”部分只显示带参数的两个构造函数,无参的A()完全没踪影。后来我发现,默认情况下Doxygen好像会根据有没有@param标签来决定是否显示构造函数的文档,想问问有没有配置参数能强制让无参构造的文档也显示出来?
附上类A的代码:
class A { public: /// @brief constructor taking no param A() {} /// @brief constructor taking 1 param /// @param[in] x x A(int x) {} /// @brief constructor taking 2 params /// @param[in] x x /// @param[in] y y A(int x, int y) {} };
解决办法
你这个问题确实是Doxygen默认的文档提取逻辑导致的——它默认会对没有参数标签的构造函数做过滤,哪怕你加了@brief注释。不过调整几个配置参数就能解决,给你两个常用方案:
方案1:一键开启全量提取(最简单)
在你的Doxygen配置文件(一般是Doxyfile)里找到EXTRACT_ALL这个参数,把它改成:
EXTRACT_ALL = YES
这个参数会强制Doxygen提取所有带文档注释的实体,完全忽略“有没有参数标签”这个判断逻辑。改完重新生成文档,无参构造的内容就会出现在对应的文档部分了。不过要注意,这个设置会把所有带注释的成员都显示出来,包括一些你可能觉得“文档不够完整”的内容。
方案2:精准控制显示(推荐)
如果你不想开启全量提取,只想让有注释的无参构造显示,可以调整这两个参数:
HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO
这两个参数默认是YES,会隐藏没有完整文档的成员或类。但你的无参构造已经有@brief注释,属于“有文档”的范畴,把它们改成NO后,Doxygen就不会再过滤掉这个无参构造的文档了。
另外还有个小技巧可以试试:给无参构造的注释多加一行空内容,比如:
/// @brief constructor taking no param /// A() {}
有时候Doxygen会把只有单行@brief的注释判定为“不完整”,多加一行空注释块可能也能触发显示,但这个不如调整配置参数来得可靠。
记得修改配置文件后,一定要重新生成文档才能看到效果哦!
内容的提问来源于stack exchange,提问作者SecretIndividual

