对于我当前的一个项目,我定义了一个接口,我有大量的实现。您可以将其视为具有许多插件的插件接口。
这些“插件”各自处理网络协议中的不同消息类型。所以当我收到一条新消息时,我会遍历我的插件列表,看看谁能处理它,然后通过接口调用它们。
我正在努力解决的问题是如何将所有实现分配、初始化和“加载”到我的数组/向量/任何东西中。
目前我在 main() 中声明所有“插件”,然后调用“plugin_manager.add_plugin(&plugin);” 每一个人。这似乎不太理想。
所以,实际的问题是:1.这种事情有标准化的方法吗?2. 有没有办法定义一个预加载插件的数组(全局?)?3. 我是不是完全走错了路?对于这类问题,还有其他(更好的?)架构选项吗?
谢谢。
编辑:
这编译(请原谅丑陋的代码)......但它似乎有点像一个黑客。另一方面,它解决了分配问题,并清理了 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
};