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:暇があったらやってみよう