gpt4 book ai didi

c++ - 处理大量接口(interface)实现的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 02:02:35 25 4
gpt4 key购买 nike

对于我当前的一个项目,我定义了一个接口(interface),为此我有大量的实现。您可以将其视为具有许多插件的插件接口(interface)。

这些“插件”各自处理网络协议(protocol)中的不同消息类型。因此,当我收到一条新消息时,我会循环浏览我的插件列表,看看谁可以处理它,然后通过界面调用它们。

我正在努力解决的问题是如何将所有实现分配、初始化和“加载”到我的数组/vector/任何东西中。

目前我在 main() 中声明所有“插件”,然后调用“plugin_manager.add_plugin(&plugin);”为每一个。这似乎不太理想。

那么,真正的问题是:1. 这种事情有标准化的方法吗?2. 有什么方法可以定义一个预加载插件的数组(全局?)?3. 我是不是完全用错误的方式来做这件事?对于此类问题,是否还有其他(更好的?)架构选项?

谢谢。

编辑:

这可以编译(请原谅丑陋的代码)......但它看起来有点像 hack。另一方面,它解决了分配问题,并清理了 main()...这是一个有效的解决方案吗?

class intf
{
public:
virtual void t() = 0;
};

class test : public intf
{
public:
test(){}
static test* inst(){ if(!_inst) _inst = new test; return _inst; }
static test* _inst;
void t(){}
};
test* test::_inst = NULL;

intf* ints[] =
{
test::inst(),
NULL
};

最佳答案

在容器中存储某种形式的智能指针。动态分配插件并注册到容器中,以便以后使用。

您的解决方案的一种可能方法是,如果您有插件可以解码的某种形式的消息 ID,则使用从该 ID 到处理它的插件的映射。这种方法允许您根据输入消息快速查找插件。

关于c++ - 处理大量接口(interface)实现的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023076/

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