Thread overview
How to add n items to TypeTuple?
Nov 01, 2012
denizzzka
Nov 01, 2012
Justin Whear
Nov 01, 2012
Simen Kjaeraas
Nov 01, 2012
denizzzka
November 01, 2012
For example, adding 3 strings to type tuple t:

foreach( i; 0..2 )
 alias TypeTuple!( t, string ) t; // this is wrong code

and result should be:

TypeTuple!( string, string, string );
November 01, 2012
On Thu, 01 Nov 2012 19:42:07 +0100, denizzzka wrote:

> For example, adding 3 strings to type tuple t:
> 
> foreach( i; 0..2 )
>   alias TypeTuple!( t, string ) t; // this is wrong code
> 
> and result should be:
> 
> TypeTuple!( string, string, string );

Use a recursive template.  Here's one that repeats a given type N times:

template Repeat(Type, size_t Times)
{
    static if (Times == 0)
        alias TypeTuple!() Repeat;
    else
        alias TypeTuple!(Type, Repeat!(Type, Times - 1)) Repeat;
}

Invoke like so:
Repeat!(string, 3) threeStrings;
November 01, 2012
On 2012-11-01, 19:52, Justin Whear wrote:

> On Thu, 01 Nov 2012 19:42:07 +0100, denizzzka wrote:
>
>> For example, adding 3 strings to type tuple t:
>>
>> foreach( i; 0..2 )
>>   alias TypeTuple!( t, string ) t; // this is wrong code
>>
>> and result should be:
>>
>> TypeTuple!( string, string, string );
>
> Use a recursive template.  Here's one that repeats a given type N times:
>
> template Repeat(Type, size_t Times)
> {
>     static if (Times == 0)
>         alias TypeTuple!() Repeat;
>     else
>         alias TypeTuple!(Type, Repeat!(Type, Times - 1)) Repeat;
> }
>
> Invoke like so:
> Repeat!(string, 3) threeStrings;

I've always preferred the opposite order of arguments, as that
allows repetition of more complex things:

template Repeat(size_t times, T...) {
    static if ( times == 0 ) {
        alias TypeTuple!() Repeat;
    } else {
        alias TypeTuple!( T, Repeat!( times - 1, T ) ) Repeat;
    }
}

Invoke like so:

alias Repeat!(4, string, int, "Hello, template world!") YeahThisIsGonnaBeUseful;

Or:

alias Repeat!(3, string) ThreeStrings;

-- 
Simen
November 01, 2012
Great! Thanks!