How to expand an expression along with a parameter tuple?

TommiT tommitissari at hotmail.com
Mon Jun 17 05:57:47 PDT 2013


On Monday, 17 June 2013 at 12:21:31 UTC, Artur Skawina wrote:
>
> A more correct, but a bit less readable version (the types of 
> 'values' and 'arr'
> elements do not have to match) would be:
>
>    void bar(T...)(T values) {
>       static if (T.length) {
>          NTup!(T.length, typeof(arr[T[0].init])) tmp;
>          foreach (i, ref v; values)
>             tmp[i] = arr[v]*10;
>          foo(tmp);
>       }
>       else
>          foo();
>    }
> 
>    template NTup(size_t N, T...) {
>       static if (N>1)
>          alias NTup = NTup!(N-1, T, T[$-1]);
>       else
>          alias NTup = T;
>    }
>
> artur

Argh, that's a lot of boilerplate. Thanks for pointing this out. 
I didn't notice in your previous example that the expression 
types had to match with the parameter types. Now I really do 
think that we need the C++ ellipsis notation (it's just the 
ellipsis can be omitted when it would be right next to the tuple):

void bar(T...)(T values)
{
     foo((arr[values] * 10)...);
}


More information about the Digitalmars-d-learn mailing list