共通コンテナ内の共有インターフェースクラスから派生したクラスのオブジェクトの束を管理したいと思います。
問題を説明するために、さまざまなアクターを含むゲームを作成しているとしましょう。IActor
インターフェイスを呼び出して、それから派生Enemy
してみましょうCivilian
。
さて、アイデアは私のゲームのメインループがこれを実行できるようにすることです:
// somewhere during init
std::vector<IActor> ActorList;
Enemy EvilGuy;
Civilian CoolGuy;
ActorList.push_back(EvilGuy);
ActorList.push_back(CoolGuy);
と
// main loop
while(!done) {
BOOST_FOREACH(IActor CurrentActor, ActorList) {
CurrentActor.Update();
CurrentActor.Draw();
}
}
...またはそれらの線に沿った何か。この例は明らかに機能しませんが、それが私がここで尋ねている理由です。
知りたいのですが、一般的な異種コンテナ内のこれらのオブジェクトを管理するための最良、最も安全、最高レベルの方法は何でしょうか?さまざまなアプローチ(Boost :: Any、void *、boost :: shared_ptr、Boost.Pointer Container、dynamic_castを使用したハンドラークラス)については知っていますが、どちらを使用するかを決めることはできません。
また、手動のメモリ管理やネストされたポインタからできるだけ離れたいことを強調したいと思います。
感謝します:)。