|
Boost Users : |
Subject: Re: [Boost-users] Using Boost::Bind
From: Michael Caisse (boost_at_[hidden])
Date: 2011-06-28 19:10:59
On 06/28/2011 03:38 PM, Igor R wrote:
>> But what if I want to use a primitive variable, or a pointer to one of
>> my classes? Do I need to make a placeholder for each type of parameter
>> I want to use?
>>
> No, you can use bind placeholders _1, _2, _3 etc.
> _______________________________________________
>
That wont work. Those are placeholders and the caller doesn't have the
caller "primitive variable, or a pointer to one of my classes".
David -
You will want to learn a bit more about Boost.Bind. You can bind your
pointer or variable at the bind call. Parameters at the time of bind are
copied by value. If you need a reference use the boost::ref wrapper.
Expanding your example:
void DClient::resolveHandler( const boost::system::error_code& error,
int value );
...
int special_number = 42;
hostResolver->async_resolve( *nameQuery,
boost::bind(&DClient::resolveHandler, this,
boost::asio::placeholders::error,
special_number ) );
-------------------
In the above, when the handler is invoked it will pass the error value
(via the placeholder) and the value of special_number during the bind...
which is 42.
You should also take a look at using shared_from_this with async
handlers to make lifetime management easier.
More tips can be found in my BoostCon'10 Asio talk:
[slides] http://objectmodelingdesigns.com/boostcon10/
[video]
http://blip.tv/boostcon/michael-caisse-an-asio-based-flash-xml-server-4190355
hth -
michael
-- Michael Caisse Object Modeling Designs www.objectmodelingdesigns.com
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