Я знаю, что XMVECTOR должен быть выровнен по 16 байтов и, следовательно, не должен быть членом класса (если я не гарантирую выравнивание). Тем не менее, я могу сделать что-то подобное?
class A
{
public:
XMVECTOR vect;
};
void fun(void)
{
A a;
XMVECTOR localVect = a.vect;
// can I now use localVect correctly?
}
Компилятор, вероятно, будет использовать movaps для реализации присваивания, что не удастся из-за выравнивания на большинстве процессоров.
Чтобы сделать это не требующим выравнивания, используйте:
class A { public: XMFLOAT4 vect; } ... XMVECTOR localVec = XMLoadFloat4( &a.vect );
Это компилируется в единую программу.
Других решений пока нет …