Javaには、オブジェクトのタイプを判別するために使用できるキーワード「instanceof」があります。C ++では、これまでに見つけた唯一の解決策は、dynamic_castを使用することでした。このアプローチは悪いだけでなく、非常に費用がかかります。それが悪い理由は、制御の流れが例外をキャッチすることによって駆動されるためです。私の頭の中の例外は、「例外的な」状況でのみ使用されるべきであり、コードのメインフローを制御するためではありません。
ネットワークハンドラーがさまざまな種類のメッセージを受信できるユースケースを想像してみてください。このハンドラーには、各ブロックがdynamic_castを試行するtrycatchブロックの長いリストを含めることができます。フローが最終的に正しいタイプを見つけるまで、すべてのメッセージに対して、多くの例外が発生する可能性があります。例外をキャッチするのは安くないので、これはアプリケーションのパフォーマンスも低下させます。
javaのinstanceof演算子と同様に、dynamic_castの代替案を提案して、例外キャッチのオーバーヘッドを回避できるようにしてください。
更新:RTTIも高価であるため、RTTI以外のソリューションは素晴らしいでしょう。おそらく、メッセージに文字列名を入れて、文字列をオブジェクトにマップすることができますか?