C2621:非法工会会员。 (c++)
C2621: illegal union member. (c++)
我使用 Visual Studio,我注意到不支持不受限制的联合。我写了一个 vec4 结构,基本上是这样的:
template<class T>
struct vec4
{
T x, y, z, w;
vec4() :x(0), y(0), z(0), w(0) {}
vec4(T x, T y, T z, T w) :x(x), y(y), z(z), w(w) {}
vec4(const vec4& v) :x(v.x), y(v.y), z(v.z), w(v.w) {}
};
所以重点是我不想单独编写 vec2i(整数)vec2d(双精度)等...。
然后我做了一个4乘4的矩阵:
template<class T>
struct mat4
{
T elements[16];
mat4()
{
for (int i = 0; i < 4 * 4; i++)
{
elements[i] = 0;
}
}
};
同样,重点是我不想编写所有单独的类型。我想以 vec4s 的形式访问矩阵列。但如果我这样做:
union
{
T elements[16];
vec4<T> columns[4];
};
我得到了 C2621。据我所知,我可以在 GCC 中执行此操作,但我想避免切换我的开发环境。有解决办法吗?
编辑:
我试过这样的技巧:
vec4<T> * column(int col)
{
return ((vec4<T>*) (((vec4<T>*)elements) + (sizeof(vec4<T>) * col)));
}
然而这似乎给我一个不好的结果。
https://msdn.microsoft.com/en-us/library/bd149yt8.aspx?f=255&MSPPError=-2147217396
Union member has a non-trivial copy constructor
具有非平凡构造函数 (12.1) 的 class 对象,一个非平凡
复制构造函数 (12.8)、非平凡的析构函数 (12.4) 或非平凡的复制赋值运算符 (13.5.3、12.8) 不能是联合的成员,也不能是此类对象的数组。
在 "struct vec4" 中 revmoving copy ctor 怎么样?
我使用 Visual Studio,我注意到不支持不受限制的联合。我写了一个 vec4 结构,基本上是这样的:
template<class T>
struct vec4
{
T x, y, z, w;
vec4() :x(0), y(0), z(0), w(0) {}
vec4(T x, T y, T z, T w) :x(x), y(y), z(z), w(w) {}
vec4(const vec4& v) :x(v.x), y(v.y), z(v.z), w(v.w) {}
};
所以重点是我不想单独编写 vec2i(整数)vec2d(双精度)等...。 然后我做了一个4乘4的矩阵:
template<class T>
struct mat4
{
T elements[16];
mat4()
{
for (int i = 0; i < 4 * 4; i++)
{
elements[i] = 0;
}
}
};
同样,重点是我不想编写所有单独的类型。我想以 vec4s 的形式访问矩阵列。但如果我这样做:
union
{
T elements[16];
vec4<T> columns[4];
};
我得到了 C2621。据我所知,我可以在 GCC 中执行此操作,但我想避免切换我的开发环境。有解决办法吗?
编辑: 我试过这样的技巧:
vec4<T> * column(int col)
{
return ((vec4<T>*) (((vec4<T>*)elements) + (sizeof(vec4<T>) * col)));
}
然而这似乎给我一个不好的结果。
https://msdn.microsoft.com/en-us/library/bd149yt8.aspx?f=255&MSPPError=-2147217396
Union member has a non-trivial copy constructor
具有非平凡构造函数 (12.1) 的 class 对象,一个非平凡 复制构造函数 (12.8)、非平凡的析构函数 (12.4) 或非平凡的复制赋值运算符 (13.5.3、12.8) 不能是联合的成员,也不能是此类对象的数组。
在 "struct vec4" 中 revmoving copy ctor 怎么样?