gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:31:21 27 4
gpt4 key购买 nike

<分区>

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

我们有一个代码库,我们可以从中构建我们的应用程序。代码库适用于 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);
}

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com