为什么 Qt 会费心重新实现相当于自定义 RTTI 系统和它们自己dynamic_cast
的QObject
层次结构、inQEvent
等?
问问题
884 次
1 回答
6
首先,Qt 中只有少数类层次结构实际上需要 RTTI。当您生成嵌入式代码时,您可以通过不发出 RTTI 信息来节省一大堆代码空间。在构建 Qt 和使用它的适当编写的项目时,您可以在编译器中关闭 RTTI。您不能再使用dynamic_cast
了,因此QObject
层次结构有自己的qobject_cast
,并QEvent
使用显式整数类型标签。
用于QObject
层次结构的自定义 RTTI 系统还允许从其元数据动态创建类型,以及编译器不知道的新类型的元数据。例如,这就是 QML 可以工作的原因。在 Qt 5 中,此功能由私有QMetaObjectBuilder
. 创建动态信号和插槽的传统方式与标准不兼容QObject::connect
。
从历史上看,一些编译器dynamic_cast
跨越共享库边界失败。
于 2014-01-23T16:55:32.437 回答