如何通知侦听器结构的哪个字段被更新?

时间:2018-08-02 04:19:12

标签: c++ observer-pattern

实际上,我的问题与语言有关(我正在使用C ++)。

我上课

sturct StudentInfo
{
  // lots of fileds
  string id;
  string name;
  int age;
  double height;
  ......
};

class IListner
{
    void OnStudentInfoChanged(StudentInfo aLatestInfo);
};
void ListenStudnetInfoChange(IListener* aListener);

我希望如果用户收到回调OnStudentInfoChanged

接收方可以区分正在更新的字段。

我不知道是否有一个优雅的模式可以解决这个问题。

我直观的解决方案是提供1-1映射枚举

喜欢

enum StudentInfoFields 
{
  field1,
  field2,
  .... 
};

并更改

void OnStudentInfoChanged(StudentInfo aLatestInfo);

void OnStudentInfoChanged(vector<StudentInfoFields> aWhichAreChanged,
                          StudentInfo aLatestInfo);

我认为这不是一个好主意,但我不知道要让用户知道。

请给我一些建议:)

谢谢。

1 个答案:

答案 0 :(得分:0)

观察者模式看起来像您所需要的,其主要思想是StudentInfo的每个实例都应保留一个观察者列表,并在其更新时通知他们。