C++ 注册组件的好方法
我有以下课程:C++ 注册组件的好方法,c++,components,C++,Components,我有以下课程: class A { public: bool canHandleIt(...) = 0; void handleIt(...) = 0; } class B { vector<A> handlers; void request(...) { foreach (handler in handlers){ if (handler.canHanleIt(...)){ handler.handleIt(...);
class A {
public:
bool canHandleIt(...) = 0;
void handleIt(...) = 0;
}
class B {
vector<A> handlers;
void request(...)
{
foreach (handler in handlers){
if (handler.canHanleIt(...)){
handler.handleIt(...);
}
}
}
}
A类{
公众:
bool-canHandleIt(…)=0;
void handleIt(…)=0;
}
B类{
向量处理器;
无效请求(…)
{
foreach(处理程序中的处理程序){
if(handler.canHanleIt(…){
handleIt(…);
}
}
}
}
所以A是一个请求处理程序接口。B收到请求并尝试响应它们。我的问题是如何在B中注册A-s的实现。我的想法:
一,。
例如,我在B中实例化处理程序,并将它们添加到它的构造函数中的列表中。我的问题是每次我创建一个新的处理程序时,我都必须修改B
二,。
创建一个新的类C,它也有对处理程序和B的引用,因此如果我向B添加registerHandler
方法,它可以在B中注册处理程序。问题与#1相同,每个新处理程序我都必须编辑C
三,。
让handler list和registerHandler方法是静态的,那么A-s的实现可以自己注册它们。这样列表就可以在全球范围内访问,我认为这不是一个好的做法
基本上,我想要的是,每当我创建一个新类型的a时,B就可以使用它,而不必编辑任何东西,只需编辑新类型的a。这个问题有什么模式或通用解决方案吗?您可能不需要
bool canHandleIt(…)
<代码>bool handleIt(…)可能足够好了。boost::any(结构)可能有助于将参数传递给每个处理程序