D言語の黒魔術
std.bindとstd.variantはエグい.
VariantにopApplyがないのは何でなんだろ?型によっては出来てもよさそうなんだけど…*1
追記
あれ,これ無理じゃね?variantに代入するたびにテンプレートハンドラをインスタンス化して,今後その情報を元に型を入れ替えてるのは分かるんだけど,そのハンドラで使ってる型ってどうやって利用できるの?opApplyで回す時のdelegateの引数の型を指定出来ない気がする.そもそもハンドラの中でもvoid*とキャストを通じてubyteを上書きしてデータを保持してるわけで…
int opApply(int delegate(ref VariantN) dg) { int result = 0; for (int i; i < length; i++) { result = dg(opIndex(i)); if (result) break; } return result; }
一応これで出来るけどコストが掛かり過ぎるしVariantの解決にはなってない.そもそもあのAndreiさんが書いたものなのにないってことは,いくら捏ねくり回しても直近の代入の型を元にopApplyを適用することは無理ってことなのか(それでもDなら,とか考えてしまうw)
*1:暇があったらやってみよう