Boost.Bind を C# で作りたい(2)
とりあえず全部の引数を束縛するのであれば簡単に作れるようだ。
delegate R Function<R>(); delegate R Function<R, T1>(T1 t1); delegate R Function<R, T1, T2>(T1 t1, T2 t2); // 以下略 Function<R> Bind<R>(Function<R> f) { return delegate { return f(); }; } Function<R> Bind<R, T1>(Function<R, T1> f, T1 t1) { return delegate { return f(t1); }; } Function<R> Bind<R, T1, T2>(Function<R, T1> f, T1 t1, T2 t2) { return delegate { return f(t1, t2); }; } // 以下略
でもこれだと、
int func(int n) { return 0; } Function<int> f = Bind(func, 100);
と書くと
'Bind
(Function , T1)' に対する型引数を使い方から推論することはできません。型引数を明示的に指定してください。
って出る。ダメポ。
そしてプレースホルダーをどうやって実装するかってのもある。さてさて。