我想爲我的C++代碼庫添加插件功能。困難的產生是因爲插件需要包含插件作者不應該知道的管道(因此保持包含文件簡單)。 所以,這是設置:插件繼承基類的C++插件系統
「PluginBase.h」。這是插件將繼承的類。
class PluginBase {
virtual void PluginProcess() = 0; // the plugin-specific capability
};
「PluginPlumbing.h」。包含管道的類。
class PluginPlumbing : public PluginBase {
void PlumbingFunction() {
// Some stuff
PluginProcess();
// Some more stuff
}
};
外框架代碼將(通過裝載DLL /所以插件的)獲得一個指向PluginPlumbing類實例,然後調用PlumbingFunction()就可以了。然而,我所遇到的難題是,我不能只是將從DLL /所得到的PluginBase指針上傳到PluginPlumbing指針,因爲它顯然實際上並不從PluginPlumbing繼承。而且我不能讓Plugin從PluginPlumbing繼承,因爲那時我就回到了插件編寫者身上。
我可以想象唯一的解決辦法是,代替很好地繼承,所述PluginBase和PluginPlumbing是完全單獨的類。 PluginBase將由DLL/so實例化,並且PluginPlumbing實例將由框架實例化,並遞交該PluginBase指針,以便它可以進行管道調用。這是唯一的解決方案嗎?