On 01/20/2016 04:38 AM, pineapple wrote:
I'd like to make a constructor which takes a variable list of arguments,
of a short list of possible types, with different handling depending on
the type. I haven't been able to find any documentation or examples that
did quite what I'm trying to. Help?
A fun pseudocode example of what I'm trying to do:
this(...){
foreach(argument){
if(argument is a number){
do stuff with it;
}else if(argument is of type A){
do other stuff;
}else if(argument is of type B){
yet more stuff;
}
}
}
import std.stdio;
struct A {
double d;
}
struct B {
string s;
}
struct C {
this(T...)(T args) {
foreach (arg; args) {
static if (is (typeof(arg) == int)) {
writefln("int: %s", arg);
} else static if (is (typeof(arg) == A) ) {
writefln("A: %s", arg);
} else static if (is (typeof(arg) == B)) {
writefln("B: %s", arg);
}
}
}
}
void main() {
auto c = C(42, A(1.5), B("hello"));
}
Prints:
int: 42
A: A(1.5)
B: B("hello")
And there is another example here:
http://ddili.org/ders/d.en/templates_more.html#ix_templates_more.tuple%20template%20parameter
Ali