On Thursday 21 November 2002 11:53 am, David Abrahams wrote:
> > Lambda has the "sig" member template that, given the set of argument
> > types, computes the return type. function_traits will give you the
> > information for a function pointer. Boost.Function supplies 'arity' and
> > argI_type. std::unary_function and std::binary_function are useful for
> > standard library function objects. Basically, it's a big mess, especially
> > when one needs to deal with template operator().
>
> So there is a precedent. In fact, there are lots of precedents ;-)
>
> I am about to propose two things, take your pick (not mutually exclusive):
>
> 1. That we have a signature_traits<U> whose nested type member is a MPL
> type sequence describing return type and arguments. When the source type is
> a member function pointer R (T::)(...), element one is T&. The
> unspecialized template can look inside U for a signature type
>    member. It should also have an is_specialized member which is false
>    if there's no specialization and U doesn't have a nested signature
>    member that's an MPL sequence.

I prefer this one. I also think we should follow Peter's suggestion and go 
with function types to return the signature. They represent a wonderfully 
concise way to express, well, a function signature; we can provide a separate 
function type->argument list/argument tuple metafunction for other uses.

>    For broken compilers we make an overloaded function set which
>    returns such a type sequence, allowing it to work for function pointers

And how do we get that returned type sequence back into a metaprogram?

        Doug
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to