delegate




function_callbackでは、引数は、callbackを設定する側で事前に決定しておく必要がありました。

これに対し、callbackする側が引数まで決定するものは、delegateと呼びます。これは、C#では必須の機能です。yaneSDK3rdでも、このdelegateをサポートしています。

枠-1
        delegate<int,string> OnTestFunc;
        OnTestFunc.set(&app, &CApp::TestFunction);
        int ret = OnTestFunc("ほげほげ");               //  string("ほげほげ")を引数として
                                                        //  CApp::TestFunctionが呼ばれ、戻り値も得られる


見てのとおり、上記のOnTestFuncは、string型をパラメータとして取り、int型を返す関数として定義されています。同じ引数をとり同じ返し型を持つdelegateは、同じdelegateと考えることが出来、代入ができます。

枠-2
    例)
        delegate<int,string> func1,func2;
        func1.set(&app, &CApp::TestFunction);
        func2 = func1;
        int ret = func2("ほげほげ");


関数コールバックが必要な場所では、このdelegateを多用することになります。

枠-3
        void    SetFlagDelegate(const delegate<int,int>& func)
            {   m_func = func; }

        delegate<int,int> m_func;