これは、最近私が行ってきたいくつかのニーズを実装する方法に関する質問です。私はこれにパターンや共通の解決策があると確信しています。私が1つ一緒に来ても、もっと学びたいと思っています。異なるパラメータを持つ派生クラスのC++メソッド
ゲームに関連するすべてのエンティティが「アクター」(「障害物」、「移動障害物」、「発射物」、「大砲」など)のクラスから派生したゲームで作業しているとします。ゲームでは、これらのエンティティはすべてstd::vector<Actor *>
ベクタに格納されているため、これらのエンティティは通過できます。
ここで、各 "俳優"がそれぞれのターンで何かを "行う"ことができ、それらにメソッド "行為"を与えようとしましょう。 Obstacle :: actはほとんど動かず、Moving_obstacle :: actとProjectile :: actはそれらを移動させ、「Cannon :: act」は新しい発射物を作成します。 「演技」
std::vector<Actor *>::iterator b=myvectorofactors.begin(), e=myvectorofactors.end();
while(b < e)
{
*b->act();
b++;
}
そしてそれらすべてを持っている:それは一種の私が順番にような何かを行うことができますので、行動::純粋仮想関数の俳優を持っていることは理にかなっています。さて、これまでのところとても良い...事は、Cannon :: actは異なるプロトタイプまたは戻り値を持つことができます(たとえば、生成された発射体を格納して、ベクトルにプッシュした)それをすべて破ります。
ここで、特定の観点から、これらのメソッドのオーバーロードは完全に異なる機能であることがわかりました。私はまた、誰もが常に事前に計画し、十分な先見性で問題を解決することができることを知っている...または誰かが問題を回避することができます。
この場合、派生したActorクラスごとに異なる一意の識別子を使用し、それらを使用して対応するクラスにキャストし、それらを回避します。私は再び同じ問題を抱えることになると確信しています。私はいくつかのエントリーレベルの解決策について知りたいと思っています。
お時間をいただきありがとうございます。
少ない壁、より多くのサンプルコードは、 – David
は@Daveに同意することはできませんしてください、それもです思考の質問。 – Nick
[訪問者パターン](http://en.wikipedia.org/wiki/Visitor_pattern)をご覧ください。 – Nick