2012-05-26 26 views
1

假設我有一些觀察過的類和一個觀察到的類,我想通知觀察者,但是以一種呈現的方式。修改過的觀察者設計模式C++

觀察到的類具有指向類中觀察方法的指針數組。 所以基本上,當我在觀察類中調用notifyObservers時,它會經過這個數組,只需在觀察者中調用必要的函數。 這個解決方案是由我的老師介紹的,而且我很難讓它工作,他很傷心這個解決方案不需要持有指向obervers的指針(比如Observer設計模式)只能指向方法。但我怎麼存儲指針的方法是知道誰應該叫他們

我想是這樣的:

class A { 
public: 
    void method(); 
} 
A a; 
void(A::*ptr)()=&a.method; 
void (*ptr)()=&a.method; 

這顯然沒有奏效。 有沒有辦法讓它工作?

回答

3

嘗試使用綁定:

std::function<void()> ptr = std::bind(&A::method, a); 
ptr(); // calls a.method(); 

注意,提到betabandido,這隻能在C++ 11個是或使用升壓舊版本。

+3

很明顯,這隻適用於C++ 11。或者可以使用提升。 – betabandido