Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 注册组件的好方法_C++_Components - Fatal编程技术网

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(结构)可能有助于将参数传递给每个处理程序