Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::function/boost::bind compilation error
From: Ahmed Badran (ahmed.badran_at_[hidden])
Date: 2009-09-05 20:52:06


Steven Watanabe wrote:
> AMDG
>
> Ahmed Badran wrote:
>> I was trying to use boost function/bind to bind the first argument of
>> a member function that takes two arguments, when I got into a
>> compilation error that I can't quite decipher or understand, below is
>> a sample representation of the problem, and then there's the
>> compilation error, am I doing something incorrectly here?
>>
>> I have tried removing the boost::mem_fn instantiation with no difference.
>>
>>
>> #include <boost/function.hpp>
>> #include <boost/bind.hpp>
>> #include <boost/mem_fn.hpp>
>> #include <iostream>
>>
>> using namespace std;
>> using namespace boost;
>>
>> class my_class
>> {
>> public:
>> void test(bool b)
>> {
>> cout << "got " << b << endl;
>> }
>> private:
>> };
>>
>>
>>
>> int main()
>> {
>> my_class c;
>> boost::function1<void, bool> test_fn;
>> boost::bind(&my_class::test, &c, _2);
>>
>> /* causes a compilation error */
>> test_fn = boost::bind<void>(boost::mem_fn(&my_class::test), &c, _2);
>
> Use _1 instead of _2. The placeholder number indicates
> the first argument to the function object created by bind.
> You're only passing a single bool argument in, so only _1
> is a valid placeholder.
>

Thanks, for some reason I thought, the function originally takes two and since I'm binding the first, I want to let the second pass through, the documentation also has

"The placeholder _N selects the argument at position N from the argument list passed at "call time.""

But since I wasn't calling it then and there, I somehow seemed to skip it.
So the _N is essentially the positional parameter of the output function from bind rather than the input function.

Thanks again.
-Ahmed


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