【问题标题】:Doxygen repeating c++ functions with default argumentsDoxygen 使用默认参数重复 c++ 函数
【发布时间】:2012-08-23 08:59:45
【问题描述】:

我正在使用 Doxygen 来记录我的一些代码。我有一个使用默认参数的函数,该参数在标题中指定,即:

unsigned int CountColumns(const std::string&,const std::string& delim="");

以及源文件中对应的实现为:

unsigned int CountColumns(const string& input,const string& delim)
{
   ...
}

当我使用 Doxygen 生成文档时,CountColumns 有两个条目 - 一个包含默认值,一个不包含:

unsigned int    CountColumns (const string &input, const string &delim)
unsigned int    CountColumns (const std::string &, const std::string &delim="")

如何避免这种情况?我不希望多个函数定义弄乱我的文档。

编辑:正如我在下面的回答中也提到的,问题似乎是由于头文件在参数中使用“std::string”,而源文件包含“使用 std: :string' 语句,然后在参数中使用 'string'。如果我在源文件中更改函数定义以使用 'std::string',Doxygen 会识别它与标题中声明的函数相同。

【问题讨论】:

  • 您是否正在运行 doxygen 来记录实现?
  • 我要求它包含源文件,以便我从我的文档中直接链接到 html 形式的源代码,以及记录哪些函数引用了哪些其他函数。你是这个意思吗? (对不起,我还在学习 doxygen 选项)。不过,我已将“INLINE_SOURCES”选项设置为 NO。

标签: c++ doxygen


【解决方案1】:

那么从文档中排除额外的功能怎么样?

这是来自 doxygen FAQ

" 如何让 doxygen 忽略某些代码片段?

新的和最简单的方法是在应该被忽略的代码段的开头添加一个带有\cond 命令的注释块和一个带有\endcond 命令的注释块。这当然应该在同一个文件中。

但你也可以为此使用 doxygen 的预处理器:如果你放

 #ifndef DOXYGEN_SHOULD_SKIP_THIS

  /* code that must be skipped by Doxygen */

 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
 around the blocks that should be hidden and put:

   PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
 in the config file then all blocks should be skipped by Doxygen as long as 

预处理 = 是。 "

【讨论】:

  • 我原以为会有一种更简洁、更优雅的方式来做这件事——如果可以的话,我不想求助于手动省略代码块。
  • 这里有两种显示方式,预处理器或使用 \cond 和 \endcond 命令,我想你正在寻找第二个
【解决方案2】:

问题似乎是由于头文件在参数中使用'std::string',而源文件包含'using std::string'语句然后在参数中使用'string' .如果我在源文件中更改函数定义以使用 'std::string',Doxygen 会识别它与标题中声明的函数相同。

虽然不理想,但它是一种可行且不太笨重的解决方案。

【讨论】:

    【解决方案3】:

    我建议在配置文件中将BUILTIN_STL_SUPPORT 设置为YES,这样 doxygen 就知道 string 是定义在 std 命名空间中的类。

    【讨论】:

    • 太好了,谢谢 - 我错过了在 Doxyfile 中看到该选项。完美运行!
    猜你喜欢
    • 2014-02-10
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多