C2621:非法工会成员.(c++)

C2621: illegal union member. (c++)

本文关键字:c++ 成员 非法 C2621      更新时间:2023-10-16

我使用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(双)ect。。。分别地然后我做了一个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&MSPP错误=-2147217396

联盟成员有一个非平凡的复制构造函数

具有非平凡构造函数(12.1)的类的对象复制构造函数(12.8)、非平凡析构函数(12.4)或非平凡复制赋值运算符(13.5.3、12.8)不能是并集的成员,这类对象的数组也不能。

在"structvec4"中重新移动复制ctor怎么样?