C ++数组初始化时出现Doxygen问题

时间:2013-10-18 18:26:54

标签: c++ doxygen initialization-list

我正在使用Doxygen为我当前的项目生成一个API,并发生了一些奇怪的行为。基本上,如果我使用初始化列表在类的构造函数中设置成员数组,Doxygen就不会产生正确的输出。

这是一个简单的测试类:

#ifndef TEST_HPP
#define TEST_HPP

class TestClass {
public:
    /** Constructor Version 1 */
    TestClass() : v{0,0,0} { }

    /** Constructor Version 2 */
    // TestClass() { 
    //     v[0] = 0;
    //     v[1] = 0;
    //     v[2] = 0;
    // }
protected:
    /** my little array */
    float[3] v;
};

#endif // TEST_HPP

如果我在构造函数的第1版的文件上运行doxygen,我会得到一个相对空的HTML文件,没有构造函数文档,也没有提到我的变量v。如果我注释掉版本1并使用版本2, Doxygen正确地为班级制作文件。

我知道这种类型的数组设置对C ++ 11来说是新的,但它是初始化还是在初始化列表中完成的事实?如果有人知道导致这种行为的原因,我会很感激,因为我们在整个代码中使用这些类型的初始值设定项,并且我希望在必要时避免进行彻底的更改。

2 个答案:

答案 0 :(得分:4)

Doxygen v1.7.6.1的历史可以追溯到2011年12月10日。它已经过时了。

在v1.8.2中基本上添加了C ++ 11支持;这个支持中的一个错误似乎正好覆盖了你的情况(#688647“修复了用C ++ 11样式统一类型解析初始化列表的问题”)在v1.8.3中修复了。

The changelog是你研究此类事情的朋友。

解决方案?升级以获取doxygen的C ++解析功能的更新 这些天我们在v1.8.5上。

答案 1 :(得分:0)

我正在使用来自ARCH / extra的Doxygen 1.8.5,当涉及 empty 初始化列表时,问题似乎仍然存在。考虑:

// not parsed correctly by doxygen 1.8.5
class X
{
public:
  typedef std::initializer_list<double> DoublesInitializer;
  typedef std::initializer_list<int   >    IntsInitializer;

  X(DoublesInitializer d, IntsInitializer i={}) : d_(d), i_(i) {}
  X(IntsInitializer i) : X({},i) {}

private:
  const std::list<double> d_;
  const std::list<int   > i_;
};

这是有效的C ++ 11代码,但在Doxygen html输出中,显示多余的“公共属性”ii_,第一个没有类型,第二个类型为{{ 1}}。 Doxygen还认为找到const std::list<int>的“初始值”,即

i

事实证明第二个构造函数是有问题的,因为它可以正常工作:

{}

private:
  const std::list<double> d_

如果这确实是一个错误,我将重新打开#688647