为什么Qt在qobject_cast,事件类型等中重新实现RTTI?

时间:2014-01-23 16:55:32

标签: qt metaobject

为什么Qt会在dynamic_castQObject层次结构中重新实现自定义RTTI系统和自己QEvent的重新实现?

1 个答案:

答案 0 :(得分:6)

首先,Qt中只有少数几个类层次结构实际上需要RTTI。生成嵌入代码时,可以通过不发出RTTI信息来节省大量代码空间。在构建Qt和使用它的适当编写的项目时,您可以在编译器中关闭RTTI。您不能再使用dynamic_cast,因此QObject层次结构具有自己的qobject_castQEvent使用显式整数类型标记。

QObject层次结构的自定义RTTI系统还允许从其元数据动态创建类型,以及编译器不知道的新类型的元数据。这就是为什么QML可以工作的原因。在Qt 5中,此功能由私有QMetaObjectBuilder提供。 legacy way of creating dynamic signals and slots与标准QObject::connect不兼容。

历史上,一些编译器dynamic_cast在共享库边界上失败。