【发布时间】:2016-03-27 11:30:44
【问题描述】:
在学习Plug & Paint Example时,我读到了
按照惯例,我们使用“Java 包名”语法来标识 接口。如果我们以后更改接口,我们必须使用不同的 标识新接口的字符串;否则,应用程序可能 崩溃。
我应该如何处理“......否则,应用程序可能会崩溃。”声明?
这是否意味着如果Q_DECLARE_INTERFACE() 和Q_PLUGIN_METADATA() 的标识字符串不同,我应该期望应用程序崩溃?
【问题讨论】:
在学习Plug & Paint Example时,我读到了
按照惯例,我们使用“Java 包名”语法来标识 接口。如果我们以后更改接口,我们必须使用不同的 标识新接口的字符串;否则,应用程序可能 崩溃。
我应该如何处理“......否则,应用程序可能会崩溃。”声明?
这是否意味着如果Q_DECLARE_INTERFACE() 和Q_PLUGIN_METADATA() 的标识字符串不同,我应该期望应用程序崩溃?
【问题讨论】:
我认为这可能意味着 - 只要(如果更改)新实现与旧实现“二进制”兼容,它就不会崩溃。因此,如果您使用新功能扩展插件类并且您的旧代码中继在相同的接口 ID 上,它将获得指向新实现的指针,该指针将被强制转换为旧声明(可能会编译为旧代码)。
所以它可能适用于那里提到的情况https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B
但是,我同意 Qt 的观点,即插件接口的变化会导致 IID 的版本变化,所以你要确保你的主要代码和插件保持一致。
【讨论】: