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

关于在 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");