2011-07-07 3 views
0

私はboost :: object_poolを使用していると思っていますが、格納するオブジェクトのタイプはすべて同じ階層にあります。私の質問は、各オブジェクトを目的のタイプに変換するためにプールを保存して使用する必要があることです。オブジェクトプールを使用した疑問

祖先をプールのタイプとして格納して、返されたオブジェクトをdinamycキャストで適切な型に変換するゲスト。

オブジェクトプールが最適な代替手段ですか?

いくつかの方向性を必要とする:)事前に感謝

EDIT:あなたのすべてが正しいです。私は伝統的な鋳造newObj =(newType)oldObjで考えていました。ごめんなさい。

+1

"しかし、私は新しいオブジェクト" What!?ダイナミックキャストの仕方ではありません。 – ybungalobill

+1

私はあなたがdynamic_castで新しいオブジェクトを生成しているとは思わない。あるオブジェクトへの1つのポインタを別の種類のオブジェクトのポインタにキャストしようとしています。 –

+1

私はあなたのシナリオを完全に理解していませんが、私は1つ言うことができます: 'dynamic_cast'を使うことは新しいオブジェクトを生成しません。 –

答えて

2

多型オブジェクトを格納するために、慣用的な解決策は、値ベースのコンテナに基本クラスのポインタを格納することです。

多変量オブジェクトを値で保存する現在の解決策は、slicingに悩まされているため機能しません。 boost object poolは空想的なアロケータとデアロケータにすぎず、多態性を提供しません。

1

boost :: object_poolは、主にと同じタイプのオブジェクトを多く割り当てるためのものです。オブジェクト階層には使用しないでください。

+0

そして実行可能な代替案は何でしょうか?ありがとう。それは良いアイデア工場といくつかのオブジェクトプール、それぞれのオブジェクトを含むだろうか? – Killrazor

+0

@Killrazor:これらのオブジェクトの割り当てパターンが何であるかを知らなくても、代替策が何であるかは分かりません。最初にオブジェクトプールが必要だったと思うようにして、あなたは彼らと何をしていましたか? –

+0

私がやっていることは、「レイヤー」と呼ばれる一連のオブジェクトに異なる種類のスプライトを配置して削除することです。それはアニメーションスプライトまたはテキストスプライト、またはパーティクルエフェクトなので、スプライトをマネージャに割り当てて正しいタイプにキャストする時間を無駄にしたくありません。私の考えは、正しいプールから正しいタイプのオブジェクトのインスタンスを返すファクトリを作ることです。工場の背後にある一連のプールを持つことは、少なくとも明らかに良いようです:) – Killrazor

関連する問題