我使用宏以下列方式生成类:
generator.h:
class CLASS_NAME : public parent
{
//generate variables with names given by CLASS_VARIABLES using complicated
//Boost.Preprocessor stuff.
};
#undef CLASS_NAME
#undef CLASS_VARIABLES
myclass.h:
#define CLASS_NAME MyClass
#define CLASS_VARIABLES (a, b, c, x, y, z)
#include "generator.h"
实际的类更复杂,并使用各种Boost.Preprocessor宏。有没有办法通过向generator.h添加注释来自动记录使用Doxygen生成的类,或者生成带文档的示例类?我尝试过启用ENABLE_PREPROCESSING和MACRO_EXPANSION,但这似乎不够。
答案 0 :(得分:4)
在我写作的时候,只要有几个条件,doxygen 就会执行完整的文件包含。来自doxygen internals documentation:
...预处理器解析,但实际上并不包含代码 遇到#include (除了#include在{within}中找到 ......}块)
我通过实验发现的另一个没有记载但却直观的前提条件是,无论{...}阻止了#include,都必须记录下来。例如,如果在FOO::A
中启用{{1}配置文件,所需的提取模式设置为“所有实体”,并在FOO::B
中正确设置了boost文件夹:
FOO::C
但是,删除MACRO_EXPANSION
以将结构放置在匿名命名空间中将导致无文档。因此,如果您可以在显式命名空间内承担INCLUDE_PATH
,那么它将起作用。
答案 1 :(得分:1)
http://www.doxygen.nl/manual/docblocks.html
中的“其他地方的文档”段落怎么样?/*! \class CLASS_NAME
\brief An auto generated class
A more detailed class description.
*/
/*! \fn CLASS_NAME::CLASS_NAME()
\brief Default constuctor
*/
答案 2 :(得分:1)
它无效。 Doxygen预处理器并不真正执行完整的文件包含(它只查看包含的文件中的宏定义;否则,ENABLE_PREPROCESSING指令将完全无用!)。所以#include "generator.h"
没有效果。
如果您使用所包含文件的内容替换#include
指令,它将起作用。 (我知道,这不是很有用)。
另一种方法是修改你的文件:
generator.h:
#define DEFCLASS class CLASS_NAME : public parent \
{ \
... whatever ... \
};
myclass.h:
#define CLASS_NAME MyClass
#define CLASS_VARIABLES (a, b, c, x, y, z)
#include "generator.h"
DEFCLASS
但如果每个源文件多次使用DEFCLASS(可能是Doxygen的错误/缺陷),这将无效。
答案 3 :(得分:1)
我建议将生成的类放在一个单独的标题中,然后记录标题。在最好的情况下,生成的类更多是实现细节。
另一种选择是脚本。使用您最喜欢的脚本语言或cheetah之类的东西都不会很糟糕。
我猜你的发电机看起来很简单,可以产生锅炉板或特性等等。
GENERATE_CLASS(Foo);
GENERATE_CLASS(Bar);
这样的东西是非常合理的grep fodder。