Boost logo

Boost :

Subject: Re: [boost] C++ function bind
From: Marcus Lindblom (macke_at_[hidden])
Date: 2009-04-18 05:16:32

claud.86_at_[hidden] wrote:
> Hi to all, i use libboost recently, it is the ideal solution for my software
> c++. Now I'm using asio and I need to invoke a function like this:
> fun(time_from_string("2010-01-30 5:03:02"),bind(&timer::run,this));
> The body of fun will look like this:
> void fun(ptime t,void h) {
> ...
> timer.async_wait(h);
> ...
> }
> Obviously the return of the type of bind is not void and that is why there
> is an error. What kind should be the h parameter? Which is the prototype of
> fun?

It's a rather complex type, containig both a mem-funn-ptr and a timer

I suggest you either make fun() a template function:

template<class F>
void fun(ptime t, F f)

Or, change void to boost::function<void>, which is a good wrapper for
eliminating complex types:

void fun(ptime t, boost::function<void()> f)

The latter has a very slight performance disadvantage but the former
requires the full definition (i.e. source) of fun() to be visible.

I'd go for the latter.


Boost list run by bdawes at, gregod at, cpdaniel at, john at