c++ - 使用插件更改 C++ 应用程序中的默认行为

标签 c++ plugins factory

<分区>

简而言之:设计和实现工厂+插件机制的最佳方式是什么,以便插件可以替换主应用程序中的对象。

我们有一个代码库,我们可以从中构建我们的应用程序。代码库适用于 70-95% 的应用程序,这意味着在每个新应用程序中,我们需要更改 5-30% 的默认行为(添加新功能、更改默认逻辑、添加 GUI 等)。

实现是基于插件的:代码库内置到 EXE 和 DLL 中,当主 EXE 运行时,我们加载一个 DLL,它添加了所需的功能。

目前每个插件都暴露了以下功能:

PluginInterface* PluginInit()
{
    return new MyCustomizedPluginInterface();
}

PluginInterface 定义为:

class PluginInterface {
public:
    virtual SomeClass1* customizedSomeClass1() = 0;
    virtual SomeClass2* customizedSomeClass2() = 0;
};

并且 SomeClass1/SomeClass2 有一些默认行为,但可以被插件覆盖和更改。

当前的实现很难添加新的自定义类。我们想从插件中替换主应用程序中的每个类,因此使用对象工厂是有意义的。

我知道的一个 SDK 使用以下技术:

PluginInterface* PluginInit(GodObject* godObject)
{
    FactoryForSomeClasses* factoryForSomeClasses = 
        godObject->factoryForSomeClasses();
    factoryForSomeClasses->setSomeClass1Creator( MyCustomizedSomeClass1::create); // create is a static creator function.
    factoryForSomeClasses->setSomeClass2Creator( MyCustomizedSomeClass2::create);
}

我想知道这种方法是否有任何替代方法。

您建议如何设计和实现我刚才描述的插件系统/工厂?

最佳答案

不久前,Dobb 博士的一篇文章讨论了这个确切的问题。这是 a link到相关文章。

顺便说一句,您可能希望为项目的插件坚持使用直接的 C 接口(interface)。这样您就可以轻松地将几乎任何语言编写的代码链接到您的框架中。虽然 C++ 很好,但能够利用比 C++ 中存在的更多东西,例如 Java 和 Python 领域中存在的令人难以置信的框架,从长远来看可能会证明是有益的。

关于c++ - 使用插件更改 C++ 应用程序中的默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/311247/

相关文章:

javascript - 使用 Javascript 检测主要插件(Java、Active-X、Flash)的存在

javascript - jQuery Taggd 插件(编辑模式)获取输入字段中的值

java - 工厂类相对于其他多态性的好处

java - 静态工厂方法每次调用时都会创建一个新对象

python - Netbeans 8.2 Python 插件

javascript - AngularJS 中工厂方法的空数组

c++ - 替换字符串时出现编译错误

C++ if 语句

c++ - 为什么 VC C4244 警告(可能丢失数据)专门处理 'int'?

c++ - 单线捷径,用于将列表重新分配给阵列