Visual Studio目前存在一个问题,即以下内容无法编译,从而产生错误
错误C2797:'vec :: v':列出成员内部的初始化 初始化列表或非静态数据成员初始值设定项不是 实施
#include <array>
template<class T, int C>
struct vec
{
typedef T value_type;
enum { num_components = C };
std::array<T, C> v;
template<typename ...Args>
vec(Args&&... args) : v{{args...}} {}
};
template<class T>
struct vec2 : vec<T, 2>
{
vec2(T x, T y) : vec(x, y) {}
};
int main(void)
{
vec<float, 2> v(10.0f, 20.0f);
}
Microsoft Connect ticket for it已关闭但there's an MSDN piece about it that建议“使用内部列表的显式构造”。我不明白怎么做这个代码看起来很陌生(初学者)。
任何人都可以使用std :: array协助一个例子吗?
答案 0 :(得分:4)
在这种特殊情况下,您只需添加一对括号:
vec(Args&&... args) : v({{args...}}) {}
这适用于VS2013,我想,你正在使用它。
使用VS2015,代码无需修改即可运行。
另请注意,对于C ++一致性vec2
应该重写为
vec2(T x, T y) : vec<T, 2>(x, y) {}
或
using base = vec<T, 2>;
vec2(T x, T y) : base(x, y) {}