
John,
On Fri, Jun 4, 2010 at 2:31 PM, John Dlugosz
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