我有以下两个类展示了命令模式。(不幸的是,两个类都有一个独特的方法名。)
//pseudocode
class Subscriber {
virtual void receive(const Event&) = 0;
}
class Dispatcher {
virtual void dispatch(const Event&) = 0;
}
我有一个类模板,其中包含一种类型的列表,并带有一种迭代此列表的方法。
//pseudocode
template<typename T>
class Registry {
typedef list<T> ObjectList;
ObjectList _objects;
void iterate(const Event& event) {
for_each(_objects.begin(), _objects.end(), ...); //not sure what to do here
}
}
我希望使用mem_fun
来创建一个函数对象,该对象在适当时调用receive
或dispatch
。我能够创建一个简单的用例,在其中直接调用没有任何参数的方法,例如:
//pseudocode
class Simple {
void simple() {/*...*/}
}
然后我进行迭代:
for_each(_objects.begin(), _objects.end(), mem_fun(&Simple::simple);
很遗憾,我不知道如何将event
参数传递给mem_fun。查看头文件,似乎可以传递一个单一的参数,但我对C ++不是很熟悉,不理解我需要做什么。
最终,我希望使iterate
方法接受一种函数对象类型,以便在列表中的每个方法上触发该方法。
我更喜欢避免使用Boost......我认为这完全可以在不引入该框架的情况下实现。
谢谢!
explicit
,并且该类应该有一个公共的typedef void result_type;
。 - ildjarn