#1
by KRNKRS » 8年前
こんにちは。
私は今、ライブラリのVAddやVSub、VScaleといったVECTOR型変数の演算関数を複数用いた場合に、個人的に「可読性が若干下がるかなぁ」と思っています。
例えばこんな感じに。
コード:
//こんなことにはまずならないとは思うけど極端な例
sumVec = VAdd(VAdd(VAdd(vec1, VAdd(vec2, VAdd(vec3, vec4)))), vec5);
そのため、oparatorで+=や*=等の演算子のオーバーロードを実装しています。
例えばこのような感じです。
コード:
//-VECTOR
VECTOR operator-(const VECTOR& vec)
{
return VScale(vec, -1.0f);
}
//VECTOR + VECTOR
VECTOR operator+(const VECTOR& vec1, const VECTOR& vec2)
{
return VAdd(vec1, vec2);
}
//VECTOR - VECTOR
VECTOR operator-(const VECTOR& vec1, const VECTOR& vec2)
{
return VSub(vec1, vec2);
}
//VECTOR * float
VECTOR operator*(const VECTOR& vec1, float scale)
{
return VScale(vec1, scale);
}
//VECTOR += VECTOR
void operator+=(VECTOR &vec1, const VECTOR& vec2)
{
vec1 = VAdd(vec1, vec2);
}
//VECTOR -= VECTOR
void operator-=(VECTOR &vec1, const VECTOR& vec2)
{
vec1 = VSub(vec1, vec2);
}
//VECTOR *= float
void operator*=(VECTOR &vec1, float scale)
{
vec1 = VScale(vec1, scale);
}
これにより、
コード:
sumVec = VAdd(VAdd(VAdd(vec1, VAdd(vec2, VAdd(vec3, vec4)))), vec5);
が、
コード:
sumVec = vec1 + vec2 + vec3 + vec4 + vec5;
とすっきりします。
このように、oparatorはクラス(今回の例で言えばVECTOR)を拡張することで、
使えなかった演算を行うことができるようになるというメリットがあります。
では、逆に、oparatorを使用することで起こる弊害やデメリットなどはあるのでしょうか。
自分で調べた限りでは実装方法しか載っていないのがほとんどでデメリットを述べている(あればの話ですが)サイトが見当たらなかったのでここで質問させていただきました。
よろしくお願いいたします。
こんにちは。
私は今、ライブラリのVAddやVSub、VScaleといったVECTOR型変数の演算関数を複数用いた場合に、個人的に「可読性が若干下がるかなぁ」と思っています。
例えばこんな感じに。
[code]
//こんなことにはまずならないとは思うけど極端な例
sumVec = VAdd(VAdd(VAdd(vec1, VAdd(vec2, VAdd(vec3, vec4)))), vec5);
[/code]
そのため、oparatorで+=や*=等の演算子のオーバーロードを実装しています。
例えばこのような感じです。
[code]
//-VECTOR
VECTOR operator-(const VECTOR& vec)
{
return VScale(vec, -1.0f);
}
//VECTOR + VECTOR
VECTOR operator+(const VECTOR& vec1, const VECTOR& vec2)
{
return VAdd(vec1, vec2);
}
//VECTOR - VECTOR
VECTOR operator-(const VECTOR& vec1, const VECTOR& vec2)
{
return VSub(vec1, vec2);
}
//VECTOR * float
VECTOR operator*(const VECTOR& vec1, float scale)
{
return VScale(vec1, scale);
}
//VECTOR += VECTOR
void operator+=(VECTOR &vec1, const VECTOR& vec2)
{
vec1 = VAdd(vec1, vec2);
}
//VECTOR -= VECTOR
void operator-=(VECTOR &vec1, const VECTOR& vec2)
{
vec1 = VSub(vec1, vec2);
}
//VECTOR *= float
void operator*=(VECTOR &vec1, float scale)
{
vec1 = VScale(vec1, scale);
}
[/code]
これにより、
[code]
sumVec = VAdd(VAdd(VAdd(vec1, VAdd(vec2, VAdd(vec3, vec4)))), vec5);
[/code]
が、
[code]
sumVec = vec1 + vec2 + vec3 + vec4 + vec5;
[/code]
とすっきりします。
このように、oparatorはクラス(今回の例で言えばVECTOR)を拡張することで、
使えなかった演算を行うことができるようになるというメリットがあります。
では、逆に、oparatorを使用することで起こる弊害やデメリットなどはあるのでしょうか。
自分で調べた限りでは実装方法しか載っていないのがほとんどでデメリットを述べている(あればの話ですが)サイトが見当たらなかったのでここで質問させていただきました。
よろしくお願いいたします。