如何使用提升 lambda 对集合中的每个元素调用方法?

How do I use boost lambda's to call a method on each element in a collection?

本文关键字:元素 调用 方法 何使用 lambda 集合      更新时间:2023-10-16

我有一个观察者实例shared_ptr列表。我想使用提升 lambda 在每个观察器上调用通知方法,如下所示:

list<ObserverSharedPtr> observers;
...
for_each(observers.begin(), observers.end(), _1->notify(event));

但是,上面的代码会产生以下编译错误:

error: base operand of `->' has non-pointer type `boost::arg<1>'

我的问题是,如何利用增强 lambda 对 STL 集合中的每个元素调用方法?

使用 boost::bindboost::lambda::bind

for_each(observers.begin(), observers.end(), boost::bind(&Observer::notify, _1, event));