On 05/05/2016 10:00 PM, Erik Smith wrote:
Is there an existing way to adapt a parameter pack to an input range? I
would like to construct an array with it.  Example:

void run(A...) (A args) {
      Array!int a(toInputRange(args));
}


Inspired by my DConf 2016 talk ;) here is a fiber-based InputRange solution:

import std.stdio;
import std.concurrency;
import std.container;

alias GeneratorFiber = std.concurrency.Generator;

void run(A...) (A args) {
    void asInputRange() {
        /* static */ foreach (arg; args) {
            yield(arg);
        }
    }

    auto range =  new GeneratorFiber!int(&asInputRange);
    auto a = Array!int(range);
    writeln(a[]);
}

void main() {
    run(1, 2, 3);
}

Ali

Reply via email to