謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

Variant型について

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から取ってきた領域という意味で。
}