如何让Doxygen识别通过宏+头文件声明的成员函数?
问题:Doxygen无法识别X-Macro生成的类成员函数
使用X-Macro方式在类中批量生成成员函数后,即使开启MACRO_EXPANSION等相关配置,这些生成的函数也始终不会出现在Doxygen文档中。相关代码如下:
代码文件
A.cpp
#include <stdint.h> class A { public: /// comment void a_public_function(); #define TYPE_MACRO(type) virtual type get_##type() const {return 42;} #include "all_types.h" }; int main() { A a; return a.get_int32_t(); }
all_types.h
#ifndef TYPE_MACRO #define TYPE_MACRO(x) #endif TYPE_MACRO(int8_t) TYPE_MACRO(int16_t) TYPE_MACRO(int32_t) TYPE_MACRO(int64_t) TYPE_MACRO(float) #undef TYPE_MACRO
已尝试过的配置调整:开启MACRO_EXPANSION,将TYPE_MACRO加入EXPAND_AS_DEFINED,修改EXPAND_ONLY_PREDEF,设置SKIP_FUNCTION_MACROS=NO,均未解决问题。
解决方法
1. 调整Doxygen配置
在Doxyfile中添加/修改以下配置项:
MACRO_EXPANSION = YES EXPAND_AS_DEFINED = TYPE_MACRO SKIP_FUNCTION_MACROS = NO PREDEFINED = TYPE_MACRO(type)=virtual type get_##type() const {return 42;}
通过PREDEFINED提前告知DoxygenTYPE_MACRO的展开规则,确保它能正确解析类内的宏展开逻辑。
2. 为生成的函数添加注释(可选但推荐)
如果需要为自动生成的函数添加文档注释,可选择两种方式:
- 把注释嵌入宏定义:
#define TYPE_MACRO(type) /// 获取##type类型的值 virtual type get_##type() const {return 42;}
- 在
all_types.h的每个TYPE_MACRO调用前单独加注释:
/// 获取int8_t类型的值 TYPE_MACRO(int8_t) /// 获取int16_t类型的值 TYPE_MACRO(int16_t) // ... 其他类型同理
调整完成后,Doxygen即可正确识别并生成这些X-Macro生成的成员函数的文档。
内容的提问来源于stack exchange,提问作者Rémi
相关产品推荐
相关产品推荐

