在java中,有一个关键字“instanceof”,可以用来判断对象的类型。在 C++ 中,到目前为止我发现的唯一解决方案是使用 dynamic_cast。这种方法不仅不好,而且非常昂贵。它不好的原因是控制流是由捕获异常驱动的。在我看来,异常应该只用于“异常”情况,而不是控制代码的主要流程。
想象一个用例,其中网络处理程序可以接收不同类型的消息。这个处理程序可以有一个很长的 try catch 块列表,每个块都尝试一个 dynamic_cast。有可能对于每条消息,都会引发许多异常,直到流最终找到正确的类型。这也会降低应用程序的性能,因为捕获异常并不便宜。
您能否建议 dynamic_cast 的替代方案,类似于 java 的 instanceof 运算符,以便我可以避免异常捕获开销?
更新:RTTI 以外的任何解决方案都会很棒,因为 RTTI 也很昂贵。也许,我可以将字符串名称放在消息中并将字符串映射到对象?