Я пишу класс vec3 для своего игрового физического движка.
Я сделал перегрузку оператора, чтобы позволить мне умножать вектор на скаляр (для масштабирования вектора):
const vec3 operator*( const real n ) const
{
return vec3(
m_x * n,
m_y * n,
m_z * n
);
}
Это работает правильно, если я использую правильный порядок в своих вычислениях:
float rImpulse;
vec3 vContactNormal;
...
vec3 vImpulse = vContactNormal * rImpulse;
если я изменяю порядок умножения (например, если я ставлю скаляр первым в вычислении), то компилятору это не нравится, и он выделяет это как ошибку.
Могу ли я обновить свой класс vec3, чтобы порядок умножения не имел значения? Как? (Наверное, хлопну себя по лбу, когда увижу ответ!)
Обновить
Я удалил исходную перегрузку оператора из класса vec3 и поместил следующие две перегрузки оператора вне класса vec3:
const vec3 operator*( const vec3 & v, const real r )
{
return vec3(
v.x() * r,
v.y() * r,
v.z() * r
);
}
const vec3 operator*( const real n, const vec3 & v )
{
return v * n;
}