variant型は内部型にしてほしいなぁ。そうすればD言語の関数の可変長引数をvariant name...に統合できるし、現在のTypeInfoとvoid*が分かれてる構造よりも良いと思う。
内部の構造はstruct{TypeInfo type; void* ptr;}な感じで。
#まぁどう考えてもテンプレートで実装した方が楽だろうけど。
以下妄想を具現化したコード。
void foo(variant a, variant[] b...){//呼び出し元でコンパイラが適切に処理 writefln(a);//"a" writefln(b[0]);//"b" writefln(b[1]);//0xc writefln(b[2]);//'d' assert(b[1].type == typeid(int)); assert(b[1] == 0xc);//opEquals(T)みたいな。 int i = b[1];//opAssign_r(T)はないのでエラー。でもopAssign_rって実装可能なような。 auto j = b[1];//jはvariable型 auto k = cast(int)b[1];//opCast_r(T)はないのでエラー。でもopCast_rって実装可能なような。 auto l = to!(int)(b[1]);//ok auto m = to!(string)(b[1]);//ok。"12"を返す。 } void main(){ foo("a", "b", 0xc, 'd');//foo(variant(string, &"a"), [variant(string, &"b"),variant(int, &0xc),variant(char, &'d')])に変換する。参照の付け方おかしいけどここでは気にしない。std.gc.mallocから取ってきた領域という意味で。 }