синонимы Использование Союза со ссылкой? - PullRequest
0 голосов
/ 06 мая 2020

каждому. У нас есть проблема. В прошлом мы разработали некоторые математические классы, используемые в графике в VS2008. Используя union для реализации синонимов данных, например,

class CMatrix4FLOAT {
public:
    union{
        struct { float m_Buffer[16];    };
        struct { float _M00, _M10, _M20, _M30,
                       _M01, _M11, _M21, _M31,
                       _M02, _M12, _M22, _M32,
                       _M03, _M13, _M23, _M33;  };
    }
    ...
    ...
};

или

class CVectorReference4FLOAT {
public:
    union{
        struct { float &m_x, &m_y, &m_z, &m_w; };
        struct { float &m_s, &m_t, &m_p, &m_q; };
        struct { float &m_r, &m_g, &m_b, &m_a; };
    }
    ....
    CVectorReference4FLOAT(float * Array):
    m_x(Array[0]), m_y(Array[1]), m_z(Array[2]), m_z(Array[3]),
    m_s(Array[0]), m_t(Array[1]), m_p(Array[2]), m_q(Array[3]),
    m_r(Array[0]), m_g(Array[1]), m_b(Array[2]), m_a(Array[3])
    {}        
};

ex:
float Buffer[4];
CVectorReference4FLOAT P0(Buffer);
P0.m_x = 3.5f;
CVectorReference4FLOAT Color(Buffer);
Color.m_r = 0.7f;
CMatrix4f MatrixLookAt;
CVectorReference3FLOAT AxisX = MatrixLookAt.GetColumnVector(0); 

Однако мы не разрешено использовать ссылки в union после vs2015, что вызывает у нас некоторые проблемы. Мы не можем использовать разные имена для представления одних и тех же данных, или нам нужно немного рискнуть, чтобы вернуться к использованию точки?

...