C ++中成员修改的事件/通知

时间:2012-05-25 12:07:48

标签: c++ events notify

class A{
  int i;
};

class B{
  // sense i is changed by A    
};

如果i的值由A更改,则应通知B。有任何建议如何实现这个?

6 个答案:

答案 0 :(得分:3)

您在寻找Observer Design Pattern吗?

答案 1 :(得分:2)

Observer pattern是实现此目标的标准方法。维基百科文章和网络上有很多指针(只是谷歌“观察者模式c ++”)。

答案 2 :(得分:2)

查看observer或发布商订阅者模式。

答案 3 :(得分:2)

您的课程需要不同的实现:

class B {

public:
  Alert(int value_changed) {
     // implement whatever you want
     // for example printf("Value has changed to %i class A!!!\n", value_changed);
       }

}


class A {
/* constructor implementation */
 A(int i) {
           internal_value = i;
           B_class = new B() //notice that B will automatically be created by A!
          }

~A() { delete B_class; }

public:

 ChangeValue(int new_value) {
           internal_value = new_value;
           B_class.Alert(internal_value);
           }

private:

int internal_value;
B *B_class;

}

int main() {

A my_A(10); // you implicitly create a pair of classes A - B;

my_A.ChangeValue(20); // you should notice that A calls B automatically

return 0;
}

答案 4 :(得分:1)

Observer Pattern是您问题的主要解决方案。

您还可以使用SIGNALSSLOTS。有两个主要的库来实现它们:

1)Boost

2)QT(虽然它是一个只使用SIGNALSLOT api的大型库

答案 5 :(得分:0)

C ++不提供开箱即用的功能,您必须自己编程。我想你应该阅读设计模式Observer pattern来实现这一点。