1
class A{
  int i;
};

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

の値がiA によって変更された場合、B は通知を受け取る必要があります。これを実装する方法について何か提案はありますか?

4

6 に答える 6

2

オブザーバーデザインパターンをお探しですか?

于 2012-05-25T12:09:58.757 に答える
1

オブザーバーパターンは、これを実装するための標準的な方法です。ウィキペディアの記事やWeb(グーグルの「オブザーバーパターンc ++」)にはたくさんのポインターがあります。

于 2012-05-25T12:10:04.830 に答える
1

オブザーバーまたはパブリッシャー/サブスクライバーのパターンを見てください。

于 2012-05-25T12:11:10.350 に答える
1

クラスには別の実装が必要です。

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;
}
于 2012-05-25T13:13:49.183 に答える
1

これObserver Patternが問題の主な解決策です。

SIGNALSとを使用することもできますSLOTS。それらを実装する 2 つの主要なライブラリがあります。

1)ブースト

2) QTSIGNAL (ただし、とSLOTapiだけを使用するための大きなライブラリです)

于 2012-05-25T12:13:44.240 に答える
0

C ++は、この機能をそのままでは提供していません。自分でプログラムする必要があります。これを実現するには、デザインパターンオブザーバーパターンを読み取る必要があると思います。

于 2012-05-25T12:10:13.300 に答える