为什么需要RTTI?

imr*_*ran 1 c++

为什么需要RTTI(运行时类型信息)?

mjv*_*mjv 11

RTTI,运行时类型信息,为C++引入了[温和]反射形式.

它允许知道例如超类的类型,因此允许处理全部来自相同基类型的对象的异构集合.以特定于各个超类的方式.(假设您有一个"车辆"对象数组,并且需要与在阵列中找到的"卡车"对象进行不同的处理).

然而,RTTI是否必要的问题是一个开放的问题.故事是Bjarne Stroustrup故意将此功能从原始的C++规范中排除,因为担心它会被滥用.
确实存在过度使用/滥用反射功能的机会,而这在C++最初引入时可能更为重要,因为在主流程序员社区中没有这样的OOP文化.
这说,有了更多OOP精明的社区,有效地展示了反思可以做的所有好事(例如,使用Java或C#等语言)以及现在使用的花哨的设计模式,我坚信RTTI和反思即使有时被误用,大部分功能也非常重要.

  • 斯特鲁斯特鲁普的担心是有道理的。它的大部分使用似乎都是向下转换的并且通常违反了面向对象的规则。如今,人们希望它能被更明智、更恰当地使用。 (2认同)
  • RTTI的一个奇妙用途是`boost :: any`. (2认同)