【问题标题】:Q_DECLARE_INTERFACE() and Q_PLUGIN_METADATA(), interface id string need to match?Q_DECLARE_INTERFACE()和Q_PLUGIN_METADATA(),接口id字符串需要匹配吗?
【发布时间】:2016-03-27 11:30:44
【问题描述】:

在学习Plug & Paint Example时,我读到了

按照惯例,我们使用“Java 包名”语法来标识 接口。如果我们以后更改接口,我们必须使用不同的 标识新接口的字符串;否则,应用程序可能 崩溃。

我应该如何处理“......否则,应用程序可能会崩溃。”声明?

这是否意味着如果Q_DECLARE_INTERFACE()Q_PLUGIN_METADATA() 的标识字符串不同,我应该期望应用程序崩溃?

【问题讨论】:

    标签: c++ qt c++11 qt5


    【解决方案1】:

    我认为这可能意味着 - 只要(如果更改)新实现与旧实现“二进制”兼容,它就不会崩溃。因此,如果您使用新功能扩展插件类并且您的旧代码中继在相同的接口 ID 上,它将获得指向新实现的指针,该指针将被强制转换为旧声明(可能会编译为旧代码)。

    所以它可能适用于那里提到的情况https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B

    但是,我同意 Qt 的观点,即插件接口的变化会导致 IID 的版本变化,所以你要确保你的主要代码和插件保持一致。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-03
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 2014-11-02
      相关资源
      最近更新 更多