ゲームでは、互いに通信するエンティティがあります。プレイヤーがアイテムと衝突し、そのアイテムがそのアイテムに配置されているとします。std::vector<Item*>
ダイナミックキャストはここで適切ですか?
プレーヤーが衝突メッセージを受信すると、アイテムをエンティティ*として受け取ります。プレイヤーがそれをアイテムとしてキャストし、キャストが成功した場合はアイテムをインベントリにプッシュするのが適切でしょうか?
ゲームは彼にHIT_ITEMメッセージを送信した場合でも、彼はまだそれをプッシュし、それをキャストする必要があります。
おかげ
キャストなしでこれを行うことができる再設計の例を教えてください。私のMessageクラスにはEntity *があります。そのため、すべてがこのように送信されます。私のMessageクラスにゲームのすべてのEntityタイプへのポインタが含まれていますか? – jmasterx
@Milo:そうしてはいけません。私はあなたの内部を知らない。これらの目的に役立つ数多くのパターンがあります。それぞれ独自のケースに該当します...しかし、一般的な目的のメッセージに関する限り、通常はダウンキャストがあります –
@Milo:訪問者との二重ディスパッチアイテムをプレーヤーの在庫に追加するためのものです。 "二重発送"を検索すると、十分な例が得られます。 – Xeo