为什么Qt会dynamic_cast在QObject层次结构QEvent等中重新实现自定义RTTI系统和自己的系统?
首先,Qt中只有少数几个类层次结构实际上需要RTTI.生成嵌入代码时,可以通过不发出RTTI信息来节省大量代码空间.在构建Qt和使用它的适当编写的项目时,您可以在编译器中关闭RTTI.您不能再使用dynamic_cast,因此QObject层次结构有自己的qobject_cast,并QEvent使用显式整数类型标记.
用于QObject层次结构的自定义RTTI系统还允许从其元数据动态创建类型,以及编译器不知道的新类型的元数据.这就是为什么QML可以工作的原因.在Qt 5中,此功能由私有提供QMetaObjectBuilder.创建动态信号和插槽的传统方法与标准不兼容QObject::connect.
从历史上看,有些编译器dynamic_cast在共享库边界上失败了.
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |