Base interfaces tuple
Jarrett Billingsley
kb3ctd2 at yahoo.com
Sat Mar 15 07:30:30 PDT 2008
"John C" <johnch_atms at hotmail.com> wrote in message
news:frgcqg$10kl$1 at digitalmars.com...
> BaseTypeTuple from std.traits seems to be the starting point, and
> recursively calling that template gets successive base types, but putting
> that together into a single template has defeated me. Anyone accomplished
> this?
Here's a Tango-y version:
import tango.core.Traits;
template AllBasesImpl(T...)
{
static if(T.length == 0)
alias Tuple!() AllBasesImpl;
else
alias Tuple!(T[0], AllBasesImpl!(BaseTypeTupleOf!(T[0])),
AllBasesImpl!(T[1 .. $])) AllBasesImpl;
}
template AllBases(T)
{
alias Unique!(AllBasesImpl!(BaseTypeTupleOf!(T))) AllBases;
}
I believe the Phobos version would be something like this:
import std.typetuple;
import std.traits;
template AllBasesImpl(T...)
{
static if(T.length == 0)
alias TypeTuple!() AllBasesImpl;
else
alias TypeTuple!(T[0], AllBasesImpl!(BaseTypeTuple!(T[0])),
AllBasesImpl!(T[1 .. $])) AllBasesImpl;
}
template AllBases(T)
{
alias NoDuplicates!(AllBasesImpl!(BaseTypeTuple!(T))) AllBases;
}
More information about the Digitalmars-d-learn
mailing list