关于在 lambda 表达式中使用智能指针的问题
问题是这样的,boost::lambda 表达式很适合用来作为标准库泛型算法中的函数对象,以 std::find_if 为例,假定有一个结构
然后有一个 std::vector
如果我要在这个容器中查找成员 id 的值等于 id_value 的元素,可以这样写
如果这个容器里不是直接存放的元素,而是存放的元素的原始指针,那么可以这样写
但是如果容器里存放的不是原始指针,而是智能指针 boost::shared_ptr<T>,请问同样的操作该如何书写 lambda 表达式,求指点?
class T
{
string id;
//......
};
然后有一个 std::vector
std::vector<T> v;
如果我要在这个容器中查找成员 id 的值等于 id_value 的元素,可以这样写
std::vector<T>::const_iterator it = std::find_if(v.begin(), v.end(),
boost::lambda::bind(&T::id, boost::lambda::_1) == id_value);
如果这个容器里不是直接存放的元素,而是存放的元素的原始指针,那么可以这样写
std::vector<T*>::const_iterator it = std::find_if(v.begin(), v.end(),
(boost::lambda::_1->* &T::id) == id_value);
但是如果容器里存放的不是原始指针,而是智能指针 boost::shared_ptr<T>,请问同样的操作该如何书写 lambda 表达式,求指点?
...全文
相关推荐
C++ 中使用lambda代替 unique_ptr 的Deleter的方法
在代码块`//3`中,我们绕过了这个问题,通过在初始化列表中提供lambda表达式`d`,而不是直接使用其类型。
C编程语言深度探索与高效实践学习笔记项目_涵盖现代C核心特性如Lambda表达式右值引用移动语义智能指针类型推导模板元编程并发编程内存管理对象生命周期RA.zip
本学习笔记项目深入探索了C语言的现代核心特性,包括但不限于Lambda表达式、右值引用、移动语义、智能指针、类型推导、模板元编程、并发编程、内存管理以及对象生命周期等各个方面。
winlamb:用于Win32 API的轻量级现代C ++ 11库,使用lambda处理Windows消息
下面我们将详细探讨winlamb库的关键特点和使用方法。### 1. C++11 Lambda表达式Lambda表达式是C++11引入的一个重要特性,允许程序员在代码中定义匿名函数。
C ++中的Windows开发,使用菜单
最后,`std::enable_shared_from_this`是C++标准库中的一个模板类,它主要用于解决智能指针(如`std::shared_ptr`)之间的自引用问题。
C++智能指针详解[项目源码]
C++允许通过自定义删除器,例如使用仿函数或lambda表达式,来自定义对象被释放时的行为,以满足不同的资源释放策略。


