2012-04-21 11 views
1

を作成します。私はちょうどこの文脈について少し混乱しています。ファンクタは、私はこのコードを持っている信号オブジェクト

私がしたいことは明確です:オブジェクトへのポインタとそのメンバ関数へのポインタを渡してファンクタを作成し、それをプログラムに渡します。

あなたの助けと "訂正"に感謝します。

ありがとうございました!

+2

ベン・Cは、あなたの質問に答えていますが、[Observerパターン](http://en.wikipedia.org/に見たいと思うかもしれませんwiki/Observer_pattern)あなたの**元の**問題だと思うものへの素敵なアプローチです。 – smocking

+0

@smocking私のコードイベントはいくつかのイベントではなく複数のイベントに伝播されるので、これまでに扱ったケースがありましたが、このケースではオブザーバーのパターンが私の目的です。被告。とにかく、私がコントラストを観察するのを助けてくれてありがとう。 – Haix64

+0

なぜ私はあなたがそのようなシグナリングを望んでいるのか分かりませんが、ObserverとObservableの両方のインターフェイスから継承した "連鎖"シグナリングクラスを使用することでパターンを少し拡張できませんでしたか? – smocking

答えて

0

あなたはこのようなことをしようとしていますか?

#include <string> 
#include <iostream> 

// signal supporter parent 
class signalable 
{ 
public: 
    void foo(std::string s) { std::cout << "hello: " << s << std::endl; } 
}; 


template <class typeT = signalable> 
class trigger 
{ 

    typedef void (typeT::*trig)(std::string); 

    private: 
     typeT* instance; 
     trig fun; 

    public: 
     trigger(typeT* inst, trig function) 
      : instance(inst), fun(function) 
     {} 
     void operator()(std::string param) 
     { 
      (instance->*fun)(param); 
     } 
}; 

int main() 
{ 
    signalable s; 
    trigger<> t(&s, &signalable::foo); 
    t("world"); 
} 

コードのより具体的なエラーのいくつかは、ほとんどがあなたのtypedefに関連しているようです。 C++ 11では "テンプレートのtypedef"を使用できますが、そのようには見えません。テンプレートのtypedefの例については、このスレッドを見て:

C++ template typedef

+0

あなたのコードは正しいです。メンバ 'fun'とコンストラクタの' typeT :: trig'を 'trig'に変更するだけで解決しました。ありがとうございました。 – Haix64

関連する問題