C++阵列初始化的氧气问题
Doxygen issue with C++ array initialization
我正在使用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 的新手,但它是在初始化列表中完成的还是在初始化列表中完成的事实? 如果有人知道导致这种行为的原因,我将不胜感激,因为我们在整个代码中都使用这些类型的初始值设定项,并且我希望在必要时避免彻底更改。
Doxygen v1.7.6.1 可以追溯到 2011 年 12 月 10 日。它很旧。
C++11 支持从根本上是在 v1.8.2 中添加的;此支持中的一个错误似乎完全涵盖了您的情况(#688647"修复了解析具有 C++11 样式统一类型的初始值设定项列表的问题")已在 v1.8.3 中修复。
更新日志是您研究此类事情的朋友。
解决方案是什么?升级以获取 doxygen C++解析功能的更新。
这些天我们在v1.8.5上。
我使用的是 ARCH/extra 的 Doxygen 1.8.5,当涉及到空的初始值设定项列表时,问题似乎仍然存在。考虑:
// 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输出中出现了多余的"公共属性"i
和i_
,第一个没有类型,第二个类型const std::list<int>
。Doxygen还认为找到i
的"初始值",即
{}
private:
const std::list<double> d_
事实证明,第二个构造函数是有问题的,因为它可以正常工作:
// parsed correctly by doxygen 1.8.5
class Y
{
public:
typedef std::initializer_list<double> DoublesInitializer;
typedef std::initializer_list<int > IntsInitializer;
Y(DoublesInitializer d, IntsInitializer i={}) : d_(d), i_(i) {}
Y(IntsInitializer i) : Y(DoublesInitializer(),i) {}
private:
const std::list<double> d_;
const std::list<int > i_;
};
如果这确实是一个错误,我将重新打开#688647。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- C++阵列初始化的氧气问题