对于我当前的一个项目,我定义了一个接口(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/