OtherMatrix4x4(m)
Это не оператор приведения, это конструктор преобразования .
Предположим, что следующее определение MyMatrix4x4
:
struct MyMatrix4x4
{
float x[16];
};
следующее должно сделать это:
struct OtherMatrix4x4
{
float* x;
OtherMatrix4x4(MyMatrix4x4& other)
{
x = other.x;
}
void foo()
{
x[0] = 0;
}
};
Для проверки:
MyMatrix4x4 a = {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
OtherMatrix4x4(a).foo();
cout << b.x[0]; //will output 0, not 1
РЕДАКТИРОВАТЬ Вот версия, в которой вы не можете редактировать другую матрицу:
struct OtherMatrix4x4
{
float x[16];
void foo()
{
x[0] = 0;
}
};
struct MyMatrix4x4
{
float* x;
operator OtherMatrix4x4()
{
OtherMatrix4x4 other;
x = other.x;
return other;
}
};
MyMatrix4x4 m;
OtherMatrix4x4(m).foo();