On Wed, Nov 23, 2011 at 7:33 AM, Allan Nielsen <a@awn.dk> wrote:
> It might be me which does not understand it, but as I read the
> documentation funciton_types is for manipulating functions pointers,
> not to manage template arguments...
>
> Please correct me if I'm wrong
Okay, I got it... <int(int)> is one template argument...
:
typename boost::function_types::result_type<T0>::type is the return
type, and I can use parameter_types and MPL to iterate over the
parameters. Clever..

But how do I implement the call interface:

template<typename T >
struct IfCall {
   typedef typename boost::function_types::result_type<T0>::type R;

   R call( /* T0, T1, T2...*/ ) { // can I get the MPL sequence into
the method signature??
   }
};

Ugh.  Well, what I can think of at the moment:
- Use the Boost.Preprocessor library to specialize each arity of lfCall, e.g., generate
template< class R, class T0 >
struct lfCall< R ( T0 ) > { /*...*/ R call(T0) { /*...*/ } };
and similarly for all other supported arities with the preprocessor; or
- If you're flexible in the call interface, you might be able to utilize Boost.Fusion's fuse/unfuse adaptors [1].

- Jeff

http://www.boost.org/doc/libs/1_48_0/libs/fusion/doc/html/fusion/functional/adapters.html