порядок операндов в *перегрузка оператора

Я пишу класс 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;
}
5
задан fishfood 28 July 2012 в 21:49
поделиться