我为什么要使用RTTI?

时间:2014-08-13 21:59:01

标签: c++ rtti

我听到很多可以通过使用良好的虚函数来避免RTTI ...因为RTTI很笨拙而且很慢,我为什么要使用它?在任何情况下我都应该使用RTTI而不是虚拟访问器功能吗?

1 个答案:

答案 0 :(得分:4)

RTTI可用于解决双重调度问题(一种基于动态类型的两个对象的虚拟函数)。

RTTI允许您使用虚方法自动访问类型的类继承图。

与其他一些语言功能一样,如果您只想要其功能的受限子集(如果您可以使用集中式列表,单个实现继承,甚至单个二进制,或者执行早期/后期缺乏可用性等等)你有时可以实现更有效的限制版本。

此外,通常可以将双重调度重构为正交单个调度。即使RTTI允许多次调度,代码仍然很混乱并且难以维护,并且RTTI可能是非常重要的成本(请注意编译器现在要好得多)。因此,无论如何,一个更简单,看似效率更低的单一调度解决方案通常会成为更好的主意。

当您需要动态调度时,RTTI也可用于despirwtion,但无论出于何种原因,都无法访问添加新virtual方法的功能。

紧密耦合的类暴露纯粹的接口,但需要与彼此合作才能使用RTTI,同时也可以使用RTTI来讨论盲static_cast的危险。