Thread overview
Process a TypeTuple
Jun 15, 2015
Yuxuan Shui
Jun 15, 2015
Baz
Jun 15, 2015
Justin Whear
June 15, 2015
Is it possible to apply some operation on every member of a TypeTuple, then get the result back?

Say I have a TypeTuple of array types, and I want a TypeTuple of their element types, how could I do that?
June 15, 2015
On Monday, 15 June 2015 at 03:53:35 UTC, Yuxuan Shui wrote:
> Is it possible to apply some operation on every member of a TypeTuple, then get the result back?
>
> Say I have a TypeTuple of array types, and I want a TypeTuple of their element types, how could I do that?

You can do that with std.typetuple.staticMap, example:
---
import std.stdio;
import std.typetuple;

template ElemType(T)
{
    alias ElemType = typeof(T.init[0]);
}

void main(string[] args)
{
    alias T1 = TypeTuple!(int[],ubyte[]);
    alias T2 = staticMap!(ElemType, T1);
    writeln(typeof(T1.init).stringof);
    writeln(typeof(T2.init).stringof);
}
---

outputs:

---
(int[], ubyte[])
(int, ubyte)
---

It's like the higher-order function map() but for type list:

http://dlang.org/phobos/std_typetuple.html#.staticMap


June 15, 2015
On Mon, 15 Jun 2015 04:06:12 +0000, Baz wrote:

> On Monday, 15 June 2015 at 03:53:35 UTC, Yuxuan Shui wrote:
>> Is it possible to apply some operation on every member of a TypeTuple, then get the result back?
>>
>> Say I have a TypeTuple of array types, and I want a TypeTuple of their element types, how could I do that?

For this particular example you use std.range.ElementType:

import std.typecons, std.range;
alias Elements = staticMap!(ElementType, MyRangeOrArrayTypes);