【发布时间】:2011-03-28 20:08:27
【问题描述】:
我有以下两个展示命令模式的类。 (不幸的是,两者都有一个唯一的方法名称。)
//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...我认为这完全有可能,无需将这个框架拖入其中。
谢谢!
【问题讨论】: