Visual Studio std::array 初始化程序错误 (2797)
Visual Studio std::array initializer bug (2797)
Visual Studio 目前有一个问题导致以下内容无法编译,给出错误,
error C2797: 'vec::v': list initialization inside member
initializer list or non-static data member initializer is not
implemented
#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 is closed but there's an MSDN piece about it that推荐,"use explicit construction of inner lists"。我不明白该怎么做,代码对我(初学者)来说看起来很陌生。
任何人都可以使用 std::array 协助举个例子吗?
在这种特殊情况下,您只需添加一对括号即可:
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) {}
Visual Studio 目前有一个问题导致以下内容无法编译,给出错误,
error C2797: 'vec::v': list initialization inside member initializer list or non-static data member initializer is not implemented
#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 is closed but there's an MSDN piece about it that推荐,"use explicit construction of inner lists"。我不明白该怎么做,代码对我(初学者)来说看起来很陌生。
任何人都可以使用 std::array 协助举个例子吗?
在这种特殊情况下,您只需添加一对括号即可:
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) {}