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

Reply via email to