Boost logo

Boost Users :

From: Arnaldur Gylfason (arnaldur.gylfason_at_[hidden])
Date: 2006-10-19 08:32:33


It is binding 2 to the second argument of the function (which is b) but _1
to a which means
the argument you call f with is passed as a to your function. Hence f(3)
prints 3 2 and returns 5.
If you want 2 3 you need:
boost::function<float(float)> f =
boost::lambda::bind(fx,2,boost::lambda::_1);

cheers
Arnaldur

"Chris Weed" <chrisweed_at_[hidden]>
Sent by: boost-users-bounces_at_[hidden]
19.10.2006 12:18
Please respond to
boost-users_at_[hidden]

To
boost-users_at_[hidden]
cc

Subject
Re: [Boost-users] [function][lambda] Create a boost function to a bind
functor

Hi,
I can get the following code to compile and it prints
3 2
5
but I don't quite understand why it doesn't print
2 3
5
or how to get it to do so. I thought since it is binding 2 to _1, this
would bind it to the a argument.

#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <iostream>

float fx(float a, float b)
{
  std::cout << a << " " << b << std::endl;
  return a+b;
}

int main()
{
  boost::function<float(float)> f =
boost::lambda::bind(fx,boost::lambda::_1,2);
  std::cout << f(3) << std::endl;
  return 0;
}

Thanks,
Chris

On 10/19/06, Arnaldur Gylfason <arnaldur.gylfason_at_[hidden]> wrote:
>
> a) You want to use _1 instead of _2
> b) _1/_2 are in namespace boost::lambda
> boost::function<float(float)> f =
boost::lambda::bind(fx,boost::lambda::_1,2);
>
> It is actually possible to use _2 but then the functor takes to args and
ignores the first:
> boost::function<float(float,float)> f =
boost::lambda::bind(fx,boost::lambda::_2,2);
> std::cout << f(100,3) << std::endl; // returns 5
>
> cheers
>
> Arnaldur
>
>
>
_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users



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