如何从被yield的函数中使用@copydoc复制文档?
我有一个包含大量Doxygen文档的函数testFixture,该函数在包含yield语句的测试函数testA中被调用。使用@copydoc testFixture或其完全限定版本均无法生效,但将其应用于其他未使用yield的函数时却能正常复制文档。查看生成的XML发现,Doxygen会为testFixture同时创建函数条目和变量条目(变量条目来自yield语句),且@copydoc总是解析为空的变量条目,而非带有文档的函数条目。请问是否有解决方案?
强制指定复制目标类型:因为Doxygen同时生成了函数和变量两种条目,
@copydoc可能误匹配到变量条目。直接用@copydoc function::testFixture,通过function::类型限定符强制让Doxygen优先匹配函数类型的文档条目。给函数添加唯一ID:在
testFixture的文档注释里加上@id testFixture_function,之后在需要复制文档的地方用@copydoc testFixture_function,通过唯一ID精准定位到函数的文档,避开yield生成的变量条目。屏蔽yield语句的Doxygen解析:如果测试框架允许,把yield调用改成带括号的形式
yield(testFixture());或者在yield语句前后添加Doxygen忽略注释://! @cond yield testFixture; //! @endcond让Doxygen跳过这条语句的解析,不再生成多余的变量条目。
通过宏定义修正Doxygen解析逻辑:在Doxygen配置文件(Doxyfile)里修改
PREDEFINED选项,添加宏定义让yield被当作普通函数调用处理:PREDEFINED += YIELD(x)=x之后把代码里的
yield testFixture改成YIELD(testFixture),这样Doxygen就不会把它解析成变量声明,也就不会生成额外的变量条目了。
内容的提问来源于stack exchange,提问作者ILostMySpoon

