Boost logo

Boost :

Subject: Re: [boost] determine first arg of callable
From: Oliver Kowalke (oliver.kowalke_at_[hidden])
Date: 2013-05-15 10:07:48

13/5/15 Andrey Semashev <andrey.semashev_at_[hidden]>

> On Wed, May 15, 2013 at 5:38 PM, Oliver Kowalke <oliver.kowalke_at_[hidden]
> >wrote:
> >
> > the class has to accept a callable object (function pointer or functor) -
> > what is known is that it does return void and takes one argument.
> > this is not a design decision, it is required by the user.
> > as I showed in my example it can be solved - maybe a solution would be to
> > overload the ctor with the type returned by boost::bind().
> The bind function objects do not have a single operator(), and their
> operators() are templates.

OK - some simple code:

struct B
  virtual void run() = 0;

template< typename Fn >
struct D : public B
  Fn fn;

  D( Fn fn_) : fn( fn_) {}

  void run() { fn(...) } // argument construction omitted

struct X
  B * b;

  template< typename Fn >
  X( Fn fn) : b( 0)
     b = new D< Fn >( fn);

  void run() { b->run(); }

Constraints to Fn: returns void and has only one argument.
I need to know in X::X() or D::run() what's the first and only argument of
I believe the problem should be solvable - for function pointers it is
easy, X() could be overloaded with function<>.
The only remaining issue are objects created by bind() and passed to the
ctor - I thought overloading X() with the type returned by bind() should

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