C++ 为什么Doxygen将此方法报告为属性?

C++ 为什么Doxygen将此方法报告为属性?,c++,documentation,doxygen,C++,Documentation,Doxygen,我有一个头文件,其中包含: class ClassName { ... //////////////////////////////////////////////////////////////////////////////////////////////////// /// \fn boost::function<int(void *, char *)> ClassName::getFnPtr(); /// /// \brief ... /// /// \author ...

我有一个头文件,其中包含:

class ClassName {
...

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

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

...
};
类名{
...
////////////////////////////////////////////////////////////////////////////////////////////////////
///\fn boost::函数类名称::getFnPtr();
///
///\brief。。。
///
///\作者。。。
///\date。。。
///
///\返回一个boost函数对象。。。
////////////////////////////////////////////////////////////////////////////////////////////////////
boost::函数getFnPtr();
...
};
运行Doxygen时,
getFnPtr()
在“公共属性”下报告,而不是在“公共成员函数”下报告。有人能帮我让Doxygen把它放在正确的位置吗

我不熟悉Doxygen,但熟悉Javadoc。我使用的是Doxygen GUI 1.8.1


编辑:我认为Doxygen对涉及boost函数对象的模板化返回类型感到窒息。这篇文章表明DoXEGEN不处理最新的C++更改。C++的什么版本开始支持Boost函数对象返回类型?有人能给我指出用于boost函数对象返回类型的Doxygen的其他示例吗?

尝试使用typedef。大致如下:

typedef boost::function<int(void *, char *)> myfunc_t;
myfunc_t getFnPtr();
typedef boost::函数myfunc\t;
myfunc_t getFnPtr();

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


我将在下一个版本(>1.8-1)中纠正这个问题,同时可以使用N.M.建议的TyPulf的解决方案,相关的bug报告是

,可能是因为doxGEN没有C++语言的精确解析器(JavaDoc确实)。这意味着Doxygen必须在解释符号的含义和/或在某处定义符号时出错。(它在哪里拧紧取决于C++的哪个部分不实现)。尽管有这个缺陷,人们还是使用Doxygen,这一直让我感到困惑。@IraBaxter我发布的代码中是否有某种固有的东西触发了Doxygen中的已知错误?或者你只是说“Doxygen有bug,所以不要使用它?”我还有其他非常类似的方法声明,它们工作得很好。不管怎样,我都必须使用强氧,所以您能确定问题并帮助解决它吗?顺便说一下,您指出JavaDoc有C++语言的精确解析器。你的意思是Javadoc有一个语言精确的Java解析器吗?我的意思是Javadoc有一个(通过类比)语言精确的Java解析器,对吗。不,我不知道DoXyGEN型旋转变压器的局限性,除了真正的(我们为C++前端构建一个)是巨大的努力,我没有理由相信对DyxGEN已经做出了努力。我是说,“强氧剂一定有细菌”,所以我想知道为什么人们会使用它。一个答案是他们不编写复杂的C++程序,所以Doxygen所做的就是“足够正确”。如果Doxygen在您遇到的复杂情况下失败,那么它正是在最需要的地方失败的。因此,我的困惑。我会检查这是否有效,但我不想为了让Doxygen正常工作而修改原本会保持不变的代码。您在这里的typedef建议确实会导致函数正确放置。现在我坚持一个纯粹的解决方案。我接受这个答案,因为我确实在Doxygen 1.8.1中触发了一个bug,这个解决方案是我能找到的最好的解决方案。注意上面回答中提到的bug报告。