Boost logo

Boost Users :

Subject: Re: [Boost-users] Bind questions
From: Nathan Crookston (nathan.crookston_at_[hidden])
Date: 2010-06-04 21:47:42


John,

On Fri, Jun 4, 2010 at 2:31 PM, John Dlugosz <JDlugosz_at_[hidden]> wrote:
> Is the documentation for Boost::Bind matching the std::tr1::bind that got accepted?  That is, can I read this to understand it since the docs are better than what comes with the compiler, or are there differences?
>
The biggest difference I know of between boost::bind and
std::tr1::bind is that the placeholders (_1, _2, ...) are moved from
essentially being global scope to being in std::tr1::placeholders.
There may be other differences, but I don't think they'd affect the
usage you describe below.

> Consider a member function C::foo.  If I want to bind the object this parameter but leave the rest unchanged, would bind(&C::foo,x) automatically give me bind(&C::foo,x,_1,_2,_3)?
>
It would not. At least with boost::bind the former doesn't work.
Forgetting a placeholder has always been a good way for me to get an
internal compiler error on VC8.

> What if I want to call x->foo(5,_3) and not use the first two parameters or the 4th, to make something that is passed to a callback function that wants 4 arguments?  That is, the callback F is invoked F(a,b,c,d) and I want to make a function instance that can be assigned to F, and ends up calling x->foo(5,c).

To be clear, are you referring to something like the following?
#include <iostream>

#include "boost/bind.hpp"

struct C
{
  void foo(int a, int b) const
  { std::cout << a << ';' << b << std::endl; }

};

int main()
{
  C c;
  boost::bind(&C::foo, c, 5, _3)(1, 2, 3, 4);

  return 0;
}

Works for me:
$ ./a.exe
5;3

Good luck,
Nate


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