
On Sat, 09 Apr 2011 19:36:48 -0500, Agustín Bergé <kaballo86@hotmail.com> wrote:
On 09/04/2011 16:48, Joel Falcou wrote:
I was thinking lately that it is a shame we can't do the following :
boost::mpl::transform< SomeSequence, _1&>
instead of the lengthy
boost::mpl::transform< SomeSequence, add_reference<_1> >
same goes for *, const, volatile :
boost::mpl::transform< SomeSequence, volatile _1**&>
Some time ago I did some work on a metafunction to perform overload resolution. In the process of emulating and supporting template functions, I ended up with something I like to call 'type patterns' as a byproduct. It allows to query as well as create types based on 'type patterns', as the OP suggest, in a less verbose way. For example:
matches< int( _1, _, _1 ), T >::type
is T a function type returning int, taking three parameters, where the first and the last one are of the same type, and the second one is of any type? If so, which type is _1?
replace< int( _1, _2, _1 ), list< int, float > >::type
create a function type with signature int( int, float, int )
The core of it is a metafunction that decomposes the type declaration into an AST, and applies a visitor function to it. AFAIR, it considered const and volatile modifiers, pointers and references, arrays, pointers to member, function types, and even templates.
Perhaps its time for me to dig such code, and polish it up to boost standards. Would it be interest in adding something like this to MPL?
Most definitely! -- Aleksey Gurtovoy MetaCommunications Engineering