为什么 Qt 费心去重新实现相当于自定义 RTTI 系统和他们自己的系统?dynamic_cast
in the QObject
层次结构,在QEvent
, etc?
首先,Qt 中只有少数类层次结构实际上需要 RTTI。当您生成嵌入式代码时,您可以通过不发出 RTTI 信息来节省大量代码空间。当构建 Qt 以及使用它的适当编写的项目时,您可以在编译器中关闭 RTTI。你不能使用dynamic_cast
不再,因此QObject
层次结构有自己的qobject_cast
, and QEvent
使用显式整数类型标签。
定制 RTTI 系统QObject
层次结构还允许从其元数据动态创建类型,以及编译器不知道的新类型的元数据。例如,这就是 QML 可以发挥作用的原因。在 Qt 5 中,此功能由私有提供QMetaObjectBuilder http://code.woboq.org/qt5/qtbase/src/corelib/kernel/qmetaobjectbuilder_p.h.html. The 创建动态信号和时隙的传统方法 http://doc.qt.digia.com/qq/qq16-dynamicqobject.html不符合标准QObject::connect
.
从历史上看,有些编译器dynamic_cast
跨共享库边界失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)