Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2003-11-01 02:05:21


Darren Cook <darren_at_[hidden]> writes:

>>>struct Foo { int fDataMember;}
>>>
>>>int main()
>>>{
>>> std::vector<Foo> foos;
>>> Foo fo;
>>> std::find_if(foos.begin(), foos.end(), _1->fDataMember ==
>>>fo.fDataMember); //<-- won't compile; }
>
> As your vector is of Foo, not Foo*, did you mean "_1.fDataMember" ?
>
> If so, you can do this:
> std::find_if(foos.begin(), foos.end(),
> bind(&Foo::fDataMember,_1) == fo.fDataMember);
>
> That assumes:
> #include <boost/lambda/lambda.hpp>
> #include <boost/lambda/bind.hpp>
> using namespace boost::lambda;
>
>> I imagine you're having trouble with "_1->fDataMember".
>
> I didn't realize there was a limitation when using "->". Surely there
> must already be something in the lambda library to deal with this? It
> seems like something that must come up a lot.

Have you tried something along the lines of:

   (&_1)->*&Foo::fDataMember == var(fo.fDataMember)

or

   bind(&Foo::fDataMember,_1) == var(fo.fDataMember)

??

     

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net