Doxygen未生成间接创建对象的类方法的函数调用引用关系
Doxygen模板类成员函数调用引用缺失问题解决
问题根因
该问题并非已配置的EXTRACT_ALL、REFERENCES_RELATION参数错误,而是Doxygen默认对C++隐式实例化的模板成员、类型别名定义的实例对象的调用关系解析存在规则限制。
排查步骤
- 第一步检查Doxygen版本:1.8.20之前的版本存在模板实例调用解析的已知缺陷,执行
doxygen --version查看版本,低于1.9.0建议先升级到最新稳定版。 - 第二步核对遗漏配置项:当前配置缺少模板解析和调用关系增强的相关参数,补充开启以下配置:
# 开启STL与模板语义支持 BUILTIN_STL_SUPPORT = YES TEMPLATE_RELATIONS = YES # 开启函数体深度解析 SKIP_FUNCTION_BODIES = NO SKIP_FUNCTION_MACROS = NO # 开启调用图生成强化引用解析 HAVE_DOT = YES CALL_GRAPH = YES CALLER_GRAPH = YES
- 第三步检查模板实例化规则:Doxygen不会自动识别隐式实例化的模板成员的调用关系,需要显式声明实例化。
修复操作
场景1修复
在Array模板实现代码末尾添加int类型的显式实例化声明:
// 原有Array::print实现代码 template <typename T> void Array<T>::print() { for (int i = 0; i < size; i++) { std::cout<<" "<<*(ptr + i); } std::cout<<std::endl; } // 新增显式实例化声明 template class Array<int>;
场景2修复
在project_name.h的头部,提前添加Array模板的显式实例化声明:
#include <iostream> // 提前声明Array模板并显式实例化int类型 template <typename T> class Array; template class Array<int>; // 原有ProjectName类定义 class ProjectName { // ...原有实现 };
验证
重新执行Doxygen生成文档,testTemplate的References列表即可正常显示Array<int>::print()的引用条目。
内容的提问来源于stack exchange,提问作者ab inf
相关产品推荐
相关产品推荐

