读书人

关于在 lambda 表达式中使用智能指针的

发布时间: 2013-08-13 16:43:28 作者: rapoo

关于在 lambda 表达式中使用智能指针的问题
本帖最后由 zhcosin 于 2013-08-07 17:29:00 编辑 问题是这样的,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");

读书人网 >C++

热点推荐