|
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