How to add n items to TypeTuple?

2012-11-01 Thread denizzzka

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 );


Re: How to add n items to TypeTuple?

2012-11-01 Thread Justin Whear
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;


Re: How to add n items to TypeTuple?

2012-11-01 Thread Simen Kjaeraas

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


Re: How to add n items to TypeTuple?

2012-11-01 Thread denizzzka

Great! Thanks!