タイトルが示すように、実行時の型チェックの高速な方法を探しています。私の問題を説明するために、次のようなクラス階層があるとします。
Base
/ \
A D
/ \ / \
C B F E
\ /
G
これらのクラスはすべて共通のタスクを共有するため、私のプログラムでは、任意のクラスのすべてのインスタンスを Base_ptr として 1 つのリストに保持します。ある時点で、一部の派生クラスは、別のクラスのインスタンスの存在について知る必要があります。これまでのところ、私は dynamic_cast と typeid()-operator について知っていますが、どちらにもいくつかの重大な欠点があります。
- 型に互換性がない場合、dynamic_cast は多くの処理時間を消費します (たとえば、E のインスタンスを C にキャストしようとする)。
- typeid() は「isTypeOrSubtype」の場合には機能しません。たとえば、D のすべてのインスタンスまたは D から派生したものが必要です (したがって、Es、Fs、および Gs も必要です)。
理想的な解決策は、ある種の「isTypeOrSubtype」テストと、このテストが正常に返された場合のキャストのみです。いくつかのマクロ定義と事前に計算されたクラス名ハッシュを使用した独自のアプローチを得ましたが、それは非常に醜く、ほとんど保守できません。そのため、1 秒間に 2000 万回以上チェックできる、動的な型とサブタイプのチェックのクリーンで高速な方法を探しています。