修改后的观察者设计模式C ++

时间:2012-05-26 12:34:15

标签: c++ pointers methods

假设我有一些观察的课程,以及观察到的课程,我想通知观察者,但是以一种呈现的方式。

观察到的类有一个指向类中观察方法的指针数组。 所以基本上当我在观察类中调用notifyObservers时,它将通过这个数组并简单地在观察者中调用必要的函数。 这个解决方案是由我的老师提出的,我很难让它工作,他很遗憾这个解决方案不需要指向obervers(如Observer设计模式)只指向方法的指针。但是如何存储指向知道谁应该调用它们的方法的指针

我试过这样的事情:

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

这显然不起作用。 有没有办法让它发挥作用?

2 个答案:

答案 0 :(得分:3)

尝试使用bind:

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

请注意,正如提到的betabandido,这仅适用于C ++ 11或使用boost的旧版本。

答案 1 :(得分:0)

万一有人还在看这个。有一篇很好的博客文章正是如此。

http://juanchopanzacpp.wordpress.com/2013/02/24/simple-observer-pattern-implementation-c11/

如果你没有使用C ++ 11,你可以使用boost :: bind和boost :: function来使用它。