Doxygen用于记录具有可变参数的重载函数

时间:2014-05-26 10:07:31

标签: c++ doxygen variadic-functions overloading

是否可以使用doxygen为这样的代码创建适当的文档:

void Print(const char* pszFormat, ...);
void Print(const wchar_t* pszFormat, ...);

我对此代码有两个问题。首先,我无法从代码的其他部分引用这两个函数。 对于\ref Print(const char*, ...);\ref Print(const wchar_t*, ...);链接,仅生成上述声明之一。

此外,变量参数以预定义的格式放置,必须对其进行描述。试图使用' \ param'它的标记导致在函数声明中找不到有关参数的警告。由于我有多个这样的函数,如果可能的话,我想特别针对这种情况删除警告。

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您将参数字面指定为...,它将由Doxygen拾取。例如。如下:\param[in] ... Arguments for format specification。这将在您生成的文档中正确显示。

虽然不清楚const char*const wchar_t*的消歧。

答案 1 :(得分:1)

如果您启用AUTOLINK_SUPPORT(默认情况下已启用),则应该包括\ref。那就是 - Doxygen看到可能是可链接名称的东西,并试图在没有你明确地称它们为引用的情况下为它们找出它们。我刚刚测试了一个例子:

/// Get 8 bits of foo
/// @param blah The blah to foo
void getFoo(uint8_t blah) = 0;

/// Get 16 bits of foo
/// @param blah The blah to foo
void getFoo(uint16_t blah) = 0;

/// First, look at getFoo(uint8_t) for info,
/// then look at getFoo(uint16_t) for more
void getBar() = 0;

getBar()文档中创建的两个链接指向了各自的功能。

我是否使用doxygen(version 1.86)进行C ++,但我没有打开任何C或C ++优化,我有JAVA_DOC和{{1}如果你的例子是C ++或Java,我不认为它应该是很重要的,但我并不积极。

关于你的第二个问题,首先想到的是使用代码块来显示变量参数应该是什么,但我不知道是否会这样做。足以满足您的需求。例如

QT

通过这种方式,您的文档尽可能清晰,而不是实际使用每个都具有显式/// Bar some foos with extra arguments /// @param foo The foo we totally want to bar /// @return true if we barred /// Typical usage requires that we either supply the number of times to bar /// followed by some other baz ... /// @code /// uint8_t nbars = 12; // must be uint8_t because of some reason /// Baz baz = new Baz(); // or some old Baz lying around, doesn't matter /// bool isBarred = bar(foo, nbars, baz); /// @code /// ... OR, we need to supply a list of Baz's, so we know what to do /// @code /// Baz manyBaz[]; /// // fill in manyBaz with whatever Baz's you want /// bool isBarred - bar(foo, manyBaz); /// @code bool bar(foo, ...); 参数的多态(非变量)函数。虽然它可能看起来像是写在这里的大量文本,但通过doxygen运行它会使它更清晰,并且(在我看来)对于您的代码/文档的某些用户来说非常易读。