【问题标题】:Why is Doxygen reporting this method as an attribute?为什么 Doxygen 将此方法报告为属性?
【发布时间】:2012-06-01 16:48:19
【问题描述】:

我有一个头文件包含:

class ClassName {
...

////////////////////////////////////////////////////////////////////////////////////////////////////
/// \fn boost::function<int(void *, char *)> ClassName::getFnPtr();
///
/// \brief ...
///
/// \author ...
/// \date ...
///
/// \return A boost function object ...
////////////////////////////////////////////////////////////////////////////////////////////////////

boost::function<int(void *, char *)> getFnPtr();

...
};

运行 Doxygen 时,getFnPtr() 报告在“公共属性”而不是“公共成员函数”下。谁能帮我让 Doxygen 把它放在正确的地方?

我是 Doxygen 的新手,但熟悉 Javadoc。我正在使用 Doxygen GUI 1.8.1。

编辑:我认为 Doxygen 对涉及 boost 函数对象的模板化返回类型感到窒息。这篇文章 - Doxygen fails to parse templated return type - 表明 Doxygen 不处理最新的 C++ 更改。哪个版本的 C++ 开始支持 boost 函数对象返回类型?任何人都可以指出 Doxygen 用于提升函数对象返回类型的其他示例吗?

【问题讨论】:

  • 可能是因为 Doxygen 没有 C++ 语言精确解析器(JavaDoc 有)。这意味着 Doxygen 在解释符号的含义和/或在何处定义符号时必须犯错误。 (它搞砸的地方取决于它没有实现的 C++ 的哪一部分)。尽管有这个缺陷,人们仍然使用 Doxygen,这一直让我感到困惑。
  • @IraBaxter 我发布的代码中是否存在某些固有的东西会触发 Doxygen 中的一个已知错误?或者你只是说“Doxygen 有错误所以不要使用它?”我还有其他非常相似的方法声明可以正常工作。无论如何我都必须使用 Doxygen,所以你能找出问题并帮助解决它吗?顺便说一句,您指出 Javadoc 具有 C++ 语言精确解析器。你的意思是 Javadoc 有一个语言精确的 Java 解析器?
  • 我的意思是 JavaDoc 有(通过类比)一个语言精确的 Java 解析器,正确的。不,我不知道 Doxygen 类型解析器的局限性,除了真正的(我们为 C++ 前端构建一个)是巨大的努力,我没有理由相信已经为 Doxygen 做出了努力。我是说,“Doxygen 肯定有 bug”,所以我想知道人们为什么要使用它。一个答案是他们不会编写复杂的 C++ 程序,因此 Doxygen 所做的就是“足够正确”。如果 Doxygen 在您遇到的复杂情况下失败了,那么它正是在最需要它的地方失败了。因此,我的困惑。

标签: c++ documentation doxygen


【解决方案1】:

尝试使用 typedef。大致如下:

typedef boost::function<int(void *, char *)> myfunc_t;
myfunc_t getFnPtr();

【讨论】:

  • 我会检查这是否可行,但我不想更改那些原本不会为了让 Doxygen 工作而改变的代码。
  • 您在此处的 typedef 建议确实会导致正确放置函数。现在我坚持一个纯粹的解决方案。
  • 我接受这个答案是因为我确实触发了 Doxygen 1.8.1 中的一个错误,而这个解决方法是我能找到的最佳解决方案。请注意上面答案中提到的错误报告。
【解决方案2】:

问题在于 doxygen 有一些简单的启发式方法来区分函数和函数指针类型的变量。在这种情况下,返回类型的模板参数是触发错误决定的原因。

我将在下一个版本 (>1.8.1) 中更正此问题,同时您可以按照 n.m. 的建议使用 typedef 的解决方法。相关的错误报告是https://bugzilla.gnome.org/show_bug.cgi?id=677315

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2015-05-10
    • 2018-11-30
    • 2021-09-28
    相关资源
    最近更新 更多