読者です 読者をやめる 読者になる 読者になる

【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だけ束縛します

あれ?

テストしようと思ったが、
①どの引数を束縛するのかはどうやって指定するの?
②たとえ引数を適当を渡しても、両方も当てはまるのでエラーが発生します

次回に続く