|
Boost Users : |
From: Noah Roberts (roberts.noah_at_[hidden])
Date: 2006-11-29 18:38:38
On 11/29/06, "JOAQUIN LOPEZ MU?Z" <joaquin_at_[hidden]> wrote:
First, thank you for your response.
> std::cerr << "Value: " <<
> (l::bind(&test_b::f, l::_1))(boost::ref(td)) << "\n";
Well, I tried putting ref on the other side but this works...my way didn't.
Now I would need to find how to use this solution for my original
problem when td is actually a shared_ptr to an abstract base:
boost::shared_ptr<test_b> td = boost::shared_ptr<test_b>(new test_d);
This does not work:
l::bind(l::bind(&test_b::f, l::_1), boost::ref(*l::_1))(td)
Unlike boost::bind, lambda::bind doesn't work like this:
l::bind(&test_b::f, l::_1)(td)
This does but can't be used in an algorithm on a container holding
smart pointers:
l::bind(&test_b::f, l::_1)(boost::ref(*td))
Interestingly, boost::bind has an operator == that will allow me to
compare the result of f() to a value just fine...I thought I needed
lambda for this. Boost::bind doesn't suffer from an inability to work
directly with smart pointers and doesn't require special magic to use
them vs. raw vs. non-ptr. So my original problem is solved by tossing
lambda out the airlock but it might be worthwhile to find a way to
accomplish a smart pointer member call with lambda for the future.
So in the end, my problem is thus:
std::find_if(cont.begin(), cont.end(), bind(&deref_val_type::f, _1) == 5);
How is that accomplished with lambda if cont holds smart pointers? So
far I haven't found any way...
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