2013-02-24 96 views
0

我正在創建一個MVC應用程序,我希望模型能夠將輸出文本發送到GUI來顯示。這是使用升壓信號的正確方法嗎?

有幾個人推薦函數指針,但我現在已經瞭解到,如果你傳遞一個成員函數的函數指針,你還必須傳遞一個指向該對象的指針(爲什麼不只是傳遞對象指針,所以方法可以是呼籲它?)

無論如何,我也被推薦使用boost :: signals2。我已經實現了一個非常簡單的工作示例。我基本上將信號綁定到GUI對象的函數。然後將指向信號的指針傳遞給可觸發信號的對象。請參見下面的代碼...

struct GUI 
{ 
    void talk() 
    { 
     cout << "hello" << endl; 
    } 
}; 

class Person { 
public: 
    Person(){} 
    Person(const signal<void()>* sig) : sig(sig){} 
    virtual ~Person(){} 

    void testSig() 
    { 
     (*sig)(); 
    } 


private: 
    const signal<void()>* sig; 
}; 

int main() { 
    boost::signals2::signal<void()> sig; 
    GUI gui; 
    sig.boost::signals2::connect(boost::bind(&GUI::talk, &gui)); 

    Person tom(&sig); 
    tom.testSig(); 
} 

,就像我跟信號的總初學者,我不能完全肯定,如果我使用他們,因爲他們的目的使用。

回答

4

你爲什麼不把信號放在人類裏面?你可以這樣做:

struct GUI 
{ 
    void talk() { 
     cout << "hello" << endl; 
    } 
}; 

class Person { 
    boost::signals2::signal<void()> sig_; 
public: 
    Person() {} 
    virtual ~Person() {} 

    template <typename F> 
    void connect(F f) { 
     sig_.connect(f); 
    } 

    void testSig() { 
     sig_(); 
    } 
}; 

int main() 
{ 
    GUI gui; 
    Person tom; 

    tom.connect(boost::bind(&GUI::talk, &gui)); 
    tom.testSig(); 
}