3

C++ である種のイベント ハンドラーを作成しようとしています。だから私は次のものを持っています:

template<class W> 
delegate<W>* bind(W* obj, void (W::*f)(char*))
{
        return new delegate<W>(obj,f);
}

デリゲート クラスとこの関数は完全に機能します。問題は、バインド関数で返されるデリゲート オブジェクトを格納する方法ですか? ブーストと C++ 11 を使用すると非常に簡単であることはわかっていますが、それらを使用せずにこれを解決するにはどうすればよいですか? ブーストやc ++ 11などの洗練されたものより前に可能だったので、それは可能でなければならないと確信しています。

(そして、彼らはブーストでも何とかそれをしました)。

だから私がやりたいこと:

class Test1
{
    Test1(){}
    ~Test1(){}

    template<class W> 
    bind(W* obj, void (W::*f)(char*))
    {
            myCallBack = new delegate<W>(obj,f);
    }

    private:
        delegate * myCallBack;  //this does not work because I have to define the template but I dont know it know it could be anything

}

class Test2
{
    Test2()
    {
        Test1 t;
        t.bind(this, &Test2::callit);
    }
    ~Test2(){}
    void callit(char*)
    {
    }
}
4

2 に答える 2

0

実際、スマート ポインターには、元の標準で提供されていたよりも洗練された実装があります ( std::auto_ptr)。しかし、それらはすべてもう少し複雑な概念を含んでいます (主に共有ポインターの参照カウントに関して)。これらを使用する妨げは何ですか?

環境でより軽量なスマート ポインターの実装が必要な場合は、Andrei Alexandrescu のLoki Libraryが役立つ可能性があります。少なくとも限られたシステム環境ではシームレスに統合することができました (boost を使用するよりも簡単で優れています)。

多くの落とし穴があります... 標準を有効にできる場合は、これらを使用してください。

于 2013-10-17T20:11:07.300 に答える