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