【发布时间】:2018-01-15 02:32:20
【问题描述】:
C++ Qt5
我的应用有一个插件架构,有 6 种不同类型的插件。 API 由 7 个头文件组成,每个头文件包含一个抽象类:1 个带有一些通用内容的基类,以及 6 个其他的,每种类型一个。每个抽象类都包含一些常量、纯虚函数和槽以及信号定义(所有类都有 Q_OBJECT 宏)。类型特定的类继承自基类。
插件本身是具有“外部”工厂函数的动态库,该函数返回指向类实例的指针,这些类实例是特定于类型的抽象类的实现。
到目前为止一切都很好。然而,是时候为插件添加新功能,从而创建插件 API 的新版本了。以防万一有人创建了 3rd 方插件,我也想支持基于旧版本的插件。
在当前设置下,插件包含应用使用的完全相同的头文件,这意味着每次引入更改时都必须重新编译所有插件。不支持旧插件版本。
如果我为每个插件提供其自己的 API 标头副本,则基于旧版本的插件将不兼容,并且应用程序很可能会因某些分段错误而死掉。同样,不支持旧插件版本。
我想到的另一件事是每个版本都有自己的类。所以我想要base_1、base_2、typeA_1、typeA_2、typeB_1、typeB_2等。但是Q_OBJECT不支持多重继承,所以如果typeA_1继承自base_1,typeA_2不能同时继承自typeA_1和base_2。那样不行。更不用说它会为维护代码而创造的地狱,即使它工作......
有人知道如何处理这种情况吗?或者要重新设计什么以使其易于管理?
代码可以在launchpad.net/waver查看
【问题讨论】:
-
这个问题可能更适合 SE Software Engineering。
-
user0042 没有 SE 和 Software Engineering 等标签...
标签: c++ qt inheritance