On Tuesday, 28 July 2015 at 21:12:13 UTC, Johan Engelen wrote:
Hi all,
I am wondering if there is any Phobos functionality for indexing into a list using a type. What I mean is something like:

assert( somethingie!(float, float, double, real)(1, 22, 333) == 1 ); assert( somethingie!(double, float, double, real)(1, 22, 333) == 22 ); assert( somethingie!(real, float, double, real)(1, 22, 333) == 333 );

std.typetuple.staticIndexOf (going to be moved to std.meta in 2.068) can do this together with std.typecons.tuple:
----
void main()
{
    import std.typetuple: staticIndexOf;
    import std.typecons: tuple;
        
assert(tuple(1, 22, 333)[staticIndexOf!(float, float, double, real)] == 1); assert(tuple(1, 22, 333)[staticIndexOf!(double, float, double, real)] == 22); assert(tuple(1, 22, 333)[staticIndexOf!(real, float, double, real)] == 333);
}
----

Or if you think that's worth encapsulating in somethingie:
----
template somethingie(T, TList...)
{
    auto somethingie(A...)(A args)
    {
        import std.typetuple: staticIndexOf;
        import std.typecons: tuple;

        return tuple(args)[staticIndexOf!(T, TList)];
    }
}

void main()
{
assert( somethingie!(float, float, double, real)(1, 22, 333) == 1 ); assert( somethingie!(double, float, double, real)(1, 22, 333) == 22 ); assert( somethingie!(real, float, double, real)(1, 22, 333) == 333 );
}
----

Reply via email to