[D2] Variadic template alias paramaters?

Adam D. Ruppe destructionator at gmail.com
Tue Oct 27 08:22:26 PDT 2009


I'm trying to write a little function that fills in some provided variables by prompting the user for each one by name. For a set number of variables, this is easy:

=======
import std.stdio;
import std.conv;

template GetData(alias A, alias B, alias C) {
  void GetData(string message) {
    writefln("%s\n", message);

    writef("%s: ", A.stringof);
    A = to!(typeof(A))(readln());

    writef("%s: ", B.stringof);
    B = to!(typeof(B))(readln());

    writef("%s: ", C.stringof);
    C = to!(typeof(C))(readln());
  }
}

void main() {
  string first, last, email;
  GetData!(first, last, email)("Enter your contact info");


  writefln("\nGot:");
  writef("first: %s", first);
  writef("last: %s", last);
  writef("email: %s", email);
}
========

Prints the variable names and fills them in, perfectly.

But I'd like to make it more generic as to the number of parameters passed in - you can see that A, B, and C are all treated the same way.

I tried making it GetData(alias A...), but that wouldn't compile. Making it GetData(A...) compiles, but does the wrong thing:

====
template GetData(A...) {
  void GetData(string message) {
    writefln("%s\n", message);
    foreach(a; A) {
        writef("%s: ", a.stringof);
        a = to!(typeof(a))(readln());
    }

  }
}
=====

This prints:

Enter your contact info:
a:
a:
a:

And doesn't fill in the variables.

I also tried GetData(alias A[]), but that doesn't compile either.


Is there any way I can get multiple alias parameters to the template, that I can preferably foreach over?


More information about the Digitalmars-d-learn mailing list