How to expand an expression along with a parameter tuple?

Ali Çehreli acehreli at yahoo.com
Mon Jun 17 00:20:22 PDT 2013


On 06/16/2013 11:19 PM, TommiT wrote:

 > I can't figure out how to do the following C++ code in D:
 >
 > int arr[] = { 1, 3, 5, 7, 11 };
 >
 > template <typename... T>
 > void foo(T... values) { }
 >
 > template <typename... T>
 > void bar(T... values)
 > {
 >      foo((arr[values] * 10)...);
 > }
 >
 > int main()
 > {
 >      bar(1, 3, 4); /* calls foo(arr[1] * 10,
 >                                 arr[3] * 10,
 >                                 arr[4] * 10); */
 >      return 0;
 > }

The following does not answer the question of expanding but at least 
foo() receives [30, 70, 110] :)

import std.stdio;
import std.algorithm;
import std.array;
import std.range;

int[] arr = [ 1, 3, 5, 7, 11 ];

void foo(T)(T[] values...)
{
     writeln(values);
}

void bar(T)(T[] values...)
{
     foo(arr
         .indexed(values)
         .map!(a => a * 10)
         .array);
}

void main()
{
     bar(1, 3, 4);
}

Ali



More information about the Digitalmars-d-learn mailing list