LLVMには、RTTIに代わる独自の手巻きの代替手段があります。これは、組み込みのRTTIよりも速度が向上し、vtable(dyn_cast
)のないクラスへの動的キャストを可能にします。dynamic_cast<>
ただし、より多くのクラスで使用できる場合でも、使用されている方法とまったく同じように使用できます。
LLVMは評判の良いC++プロジェクトであるため、動的キャストが多すぎることは悪いデザインの兆候であり、コードの臭いとしても知られているという一般的な意見に直面しているようです。確かに、パフォーマンスの高いダイナミックキャストは、標準よりも設計での使用を改善するものではありませんdynamic_cast
。では、誰がここにいますか?動的キャストの大規模な使用がC++コードの優れた設計上の選択である場合はありますか?Googleは、LLVMトランクのソースコードでこの種の動的キャストが690回発生することを明らかにしています。