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

标签 c++ interface

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

相关文章:

c++ - 如何只选择需要的 Qt 头文件?

c++ - "Proper way"将文件夹添加到 XCode 4 中的包含路径

c++ - 使用 ostream 格式化整数输出

c++ - opencv:如何填充区域外的区域/边缘

c++ - route-me 与 libosmscout(适用于 iOS 的离线 vector map )

c# - 如何在 C# 中调用特定的显式声明的接口(interface)方法

java - Java接口(interface)中的重载方法

java - Java中的抽象类

c++ - 线程和接口(interface) C++

java - 定义常量的最佳实践 - 内部类或内部接口(interface)?