【C#】C#でboost::bindを実装してみた(2)
前回にはすべての引数を束縛することができました
部分的に束縛をやりたいと思います
イメージ
// メソッドを定義する public static void DelegateMethod(int a,int b) { // do do something }
// デリゲートを保存する(第2引数を束縛する) Action action = Bind(DelegateMethod,_X,10); // 実行 action (20);
部分的に束縛
パラメータ2個のメソッドの場合
① Action(P1,P2) -> Action(P1) ② Action(P1,P2) -> Action(P2)
この2種類があります
前回の実装から拡張する
前回実装済部分
// Action(A1,A2) -> Action() public static Action Bind<P1,P2>(Action<P1,P2> action,P1 p1,P2 p2) { return () => action(p1,p2); }
Action(P1,P2) -> Action(P1) を実装する
// Action(P1,P2) -> Action(P1) public static Action<P1> Bind<P1,P2>(Action<P1,P2> action,P1 p1,P2 p2) { return (a1) => action(a1,p2); }
P2だけ束縛し、パラメータ1個(P1)のラムダ式を返します
問題なく①を実装できました
Action(P1,P2) -> Action(P2) を実装する
// Action(P1,P2) -> Action(P2) public static Action<P2> Bind<P1,P2>(Action<P1,P2> action,P1 p1,P2 p2) { return (a2) => action(p1,a2); }
今度はP2だけ束縛します
あれ?
テストしようと思ったが、
①どの引数を束縛するのかはどうやって指定するの?
②たとえ引数を適当を渡しても、両方も当てはまるのでエラーが発生します