Steven Schveighoffer:

> Not sure if this exists in std.traits or not, but that's where I'd look.

std.typetuple.anySatisfy helps here.

-------

spir:

> Is there any static switch?

foreach done on a typetuple is a static foreach.


> Or any other nicer way to write it than:

I suggest to put the types in a typetuple and use a foreach(i, T, 
TypeTuple!(t1, t2, ...)), put your values in another typetuple and use the i 
index to access and return the values.

import std.stdio, std.typetuple;
int mapper(TX)() {
    alias TypeTuple!(int, float, string) Tkeys;
    enum values = [100, 5, 2];
    //alias TypeTuple!(100, 5, 2) Tvalues; // alternative

    foreach (i, T; Tkeys)
        if (is(T == TX))
            return values[i];
    assert(0, "Can't happen");
}
enum r = mapper!float();
static assert(r == 5);
void main() {}

Bye,
bearophile

Reply via email to