Как запустить обновление нескольких классов C ++ при обновлении общего члена всех классов - PullRequest
0 голосов
/ 26 мая 2020

Допустим, у нас есть следующий сценарий (то, что я пробовал до сих пор в очень урезанной версии):

class A{
  std::vector<int> ma;
};

class B{
  A param;
  // members that depend on "param"
  int mb1; 
  // members that DO NOT depend on "param"
  int mb2;

  B(const A &p, const int &x) param(p), mb2(x) {
    make_mb1();
  };

  void make_mb1(){
     mb2 = std::accumulate(param.begin(), param.end(), 0);  
  };
};

int main{
  A a({1,2,3});
  B b1(a,1), b2(a,2), b3(a,3);

  return 0;
}

Когда содержимое a обновляется, я хотел бы, чтобы все экземпляры класса B, которые имеют a, чтобы обновлять себя соответствующим образом, поэтому я хочу, чтобы поведение было примерно таким:

int main{
  A a({1,2,3});
  B b1(a,...), b2(a,...), b3(a,...);

  // first case
  a = std::vector({4,5,6});
  // b1, b2, b3 trigger an updated of members that depend on param 

  // second case
  b1.param = std::vector({7,8,9});
  // b1, b2, b3 trigger an updated of members that depend on param 

  return 0;
}

Как я могу это сделать, чтобы все, что мне нужно было делать как пользователь, было просто обновлять содержимое a через его экземпляр (первый случай выше) или через любые экземпляры членов (второй случай выше), а затем b1,b2,b3 запускать внутреннее обновление (возможно, используя make_mb1) членов автоматически без необходимости дополнительного кода в main? Если это концепция с именем, я более чем счастлив просто получить имя, и я буду исследовать его (я пытался выяснить это, но не могу понять, как это будет называться, поэтому мне трудно выясняя, что искать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...