C++ Qt5支持多种插件版本
我的应用程序有一个插件架构,有6种不同类型的插件。 API由7个头文件组成,每个头文件包含一个抽象类:1个基类,其中包含一些常见的东西,另外6个是每种类型的。每个抽象类都包含一些常量,纯虚函数和插槽以及信号定义(所有类都有Q_OBJECT宏)。类型特定的类从基类继承。
插件本身是动态库,带有“extern”工厂函数,该函数返回指向类型特定抽象类实现的类实例的指针。
目前为止还不错。但是,现在应该为插件添加新功能,因此需要创建插件API的新版本。为了防止有人创建第三方插件,我想支持基于旧版本的插件。
在当前的设置中,插件包含应用程序使用的相同头文件,这意味着每次引入更改时都必须重新编译所有插件。不支持旧插件版本。
如果我为每个插件提供了自己的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
user0042没有SE和Software Engineering等标签... – Peter