如何使用提升 lambda 对集合中的每个元素调用方法?
How do I use boost lambda's to call a method on each element in a collection?
我有一个观察者实例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::bind
或 boost::lambda::bind
:
for_each(observers.begin(), observers.end(), boost::bind(&Observer::notify, _1, event));
相关文章:
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 使用并行参数向量调用元素向量的成员函数
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 如何在不迭代的情况下对数组中的每个元素调用方法
- 为什么 delete[] 不等同于 C++ 中为每个元素调用 delete?
- C++为每个元素调用任意函数
- C 如何使用数组的元素调用类
- boost::lockfree-为排队的元素调用析构函数
- 如何使用提升 lambda 对集合中的每个元素调用方法?
- 为集合中的每个元素调用具有多个参数的函数
- 对C++向量的每个元素调用函数
- 为构造的std::vector中的每个元素调用默认构造函数
- c++11:用向量的元素调用变差函数
- 对std::array中的元素调用用户定义的构造函数
- 对一个对象上的每个元组元素调用函数,不进行递归
- 当每个字符串由"new char[]"创建时,如何对"vector<string>"的元素调用"delete"?
- 作为数组元素调用函数
- std::list 的擦除成员函数是否为所有存储的元素调用析构函数?
- 对集合中的每个元素调用print的通用算法