だから私は2D空間シミュレーターに取り組んでいて、calc
すべてのすべての計算を処理するリソースマネージャー''を持っています。たとえば、from calc.hpp
:
var calc::eccentricity (object A, object B);
var calc::distance (object A, object B);
var calc::orbitV (object A, object B);
など。ただし、プログラムを構造化する方法は、calc
クラス内にあります。
private:
object *ship //the currently controlled ship
object *targ //target
object *ref //reference (from which speeds, position, etc. are calculated)
そして、最初の例で与えられた計算をこれらで使用するために、次のように、計算関数ごとに3つの関数を記述します。
var calc::ship_ecc (object A){
if(!ship) //catches null pointers
return NAN;
return eccentricity(*ship, A);
}
var calc::ship_ref_ecc (){
if(!ref) //catches null pointers
return NAN;
return ship_ecc(*ref);
}
var calc::ship_targ_ecc (){
if(!targ) //catches null pointers
return NAN;
return ship_ecc(*targ);
}
の場合、およびeccentricity
の場合も同じです。したがって、計算ごとに4つの関数を使用することになります。これからわかるように、重複したコードがたくさんあります。そして、重複したコードは悪いことです。distance
orbitV
calc.hpp
私の質問は何ですか
電話をかける方法はありますか
calc.ship.targ.eccentricity();
calc.ship.ref.eccentricity(); //or variation thereof
また
calc.ship.targ(eccentricity);
calc.ship.ref(eccentricity); //or variation thereof
それ以外の
calc.ship_targ_ecc();
calc.ship_ref_ecc();
?operator()
いくつかの凝ったオーバーロードを実行したり、関数を渡したり、でfriend
クラスを作成したりできるかどうか疑問に思っていますcalc
。31 - 53
理想的には、すべての回線にしかアクセスできないようにする必要がありますpublic
。
ありがとう!
編集:yallの例を取得しました:https ://ideone.com/jypJQSこれは出力する必要があり、現在どのように機能しているかです