ゲーム物理エンジン用の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クラスから削除し、次の2つの演算子オーバーロードを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;
}