gpt4 book ai didi

c++ - 意识到对象何时更改某些值

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:45 25 4
gpt4 key购买 nike

我正在使用 C++ 和 MFC(基于对话框)。

在我的主对话框中,我有一个名为 memmory 的对象(unsigned short*,模拟 PLC 内存)和另一个名为 test 的对象,属于 A.

对象 test 有一个内存引用并且能够改变它。在主对话框中有一些依赖于内存值的图表。

我的问题是:当对象 test 更改任何内存值时,我如何更新此图?

我可以为对象 test 提供对对话框的引用,每当测试更改内存时,只需调用对话框方法来更新图形。这是不可能的,因为对象 test(类 A)不能引用对话框(出于某种原因)。

另一种选择是设置一个计时器并每隔 X 毫秒重新绘制图表,但这个选项对我来说似乎有点脏。

我认为对象测试可以在每次更改内存时发送消息 PostMessage,但为了这样做,我需要对对话框的引用,对吗?

如果有任何想法,我将不胜感激。

最佳答案

这里有一个完整的 Observer 模式示例。这是一个简单的例子,并不打算完美,例如 Observable 类的 name 属性是一个设计 问题。

我希望它能帮助您更好地了解 Observer 模式的工作原理。

#include <vector>
#include <iostream>

using namespace std;


class Observer
{
public:
Observer(){};
void notify(const char* name){
cout << "Notyification from: " << name << endl;
}
};


class Observable
{

public:
Observable(const char* name):name(name){};
// You can redefine in observable child classes the behaviour of notify_change.
virtual void notify_change(){
for (vector<Observer>::iterator it=observers.begin(); it != observers.end(); ++it)
{
(*it).notify(name);
}
}

inline const char* get_name() {return name;}

void register_observer(Observer obj){observers.push_back(obj);}
// You should add something like unregister_observer too.

private:
const char* name;
vector<Observer> observers;
};


class Boss: public Observer {

public:
Boss(){};

};

class Worker: public Observable {
public:
Worker(const char* name):Observable(name){}
void stop_working(){
notify_change();
}
};


int main()
{

Boss some_boss;
Worker some_worker("You");

some_worker.register_observer(some_boss);

some_worker.stop_working();

return 0;
}

关于c++ - 意识到对象何时更改某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23517518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com