我想为我的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指针,以便它可以进行管道调用。这是唯一的解决方案吗?