2

为什么 Qt 会费心重新实现相当于自定义 RTTI 系统和它们自己dynamic_castQObject层次结构、inQEvent等?

4

1 回答 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 回答