2
我正在为我的游戏物理引擎编写一个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;
}
如果运算符在类之外,final const关键字有什么作用? – fishfood 2012-07-28 21:22:15
@lapin ooops,复制粘贴错误。编辑。 – 2012-07-28 21:22:46
:)没问题!感谢您的答复。我会在所需的13分钟左右后接受你的答案。 – fishfood 2012-07-28 21:23:20