Boost logo

Boost :

From: Reece Dunn (msclrhd_at_[hidden])
Date: 2005-01-07 17:32:16


Brian Braatz wrote:
> With the following code, If you UNCOMMENT the "// public : Base" line,
> you get compiler errors (????)
>
> I have tested this with MS VC 7.1 against both 1.31 and 1.32 versions of
> boost with the same results.
>
> Any idea why this is happening? (full sample code I wrote is attached)
>[snip]
> std::string ReturnAString();
> [snip]
> bind(Base::ReturnAString,_1);

This is the problem. Try:
    bind(Base::ReturnAString);
or:
    bind(&Base::ReturnAString,this);

> My Compiler errors are this:
>
> c:\Data\Rmtg\Root\_Common\_Lib\Rmx\V_0_02\Exp\Src\LambdaProblem\Test_Lam
> bdaProblem.cpp(38) : error C2780: 'const
> boost::lambda::lambda_functor<... >
> boost::lambda::bind(...)' : expects 10 arguments - 2 provided

The error is misleading. I got a similar error when using Boost.Bind in
my GUI code. The basics of it is this: the arguments of bind(fn, ...)
must match to the arguments of the function *exactly*, using _n for
unspecified arguments. What this means is:

using boost::bind;
using boost::function;

class button
{
    void draw( event * ev );
};

button btn;

function< ( event * ) > foo = bind(&button::draw,&btn); // [1]
foo = bind(&button::draw,&btn,_1); // _1 needed for the event * argument

[1] generates a similar error message to the one you get above.

Maybe this should be mentioned in the documentation somewhere.

HTH,
Reece


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk