关于在 lambda 表达式中使用智能指针的有关问题
关于在 lambda 表达式中使用智能指针的问题
问题是这样的,boost::lambda 表达式很适合用来作为标准库泛型算法中的函数对象,以 std::find_if 为例,假定有一个结构
然后有一个 std::vector
如果我要在这个容器中查找成员 id 的值等于 id_value 的元素,可以这样写
如果这个容器里不是直接存放的元素,而是存放的元素的原始指针,那么可以这样写
但是如果容器里存放的不是原始指针,而是智能指针 boost::shared_ptr<T>,请问同样的操作该如何书写 lambda 表达式,求指点?
------解决方案--------------------
dereferencing a shared_ptr gives the managed type.
问题是这样的,boost::lambda 表达式很适合用来作为标准库泛型算法中的函数对象,以 std::find_if 为例,假定有一个结构
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 表达式,求指点?
lambda
shared_ptr
------解决方案--------------------
dereferencing a shared_ptr gives the managed type.
std::vector<boost::shared_ptr<T>> v;
std::find_if(v.begin(),v.end(),boost::lambda::bind(&T::id,*boost::lambda::_1) == "test");