C++有事件机制吗?

RuntimeError 2012-04-20 01:57:20
为了考虑跨平台性,我不能使用Windows的消息机制,而且那样会很麻烦。我希望实现这样的功能,比如我的程序要在图形界面上显示一个红绿灯,用一个bool变量来表示。true表示红灯,false表示绿灯。每当这个变量发生变化的时候,要通知图形界面调用change_color函数修改灯的颜色。最开始我想的是,每次修改完这个变量之后主动调用change_color,但是后来发现很多地方都会修改这个变量的值,每次都主动调用不太合适。我想要的结果是,当变量的值发生变化的时候自动调用某个函数。
有没有办法利用C++自身的功能来实现上面的内容?
...全文
219 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghlhy0505 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
回调?可以。最简单就函数指针,要么用std::function(没C++11就boost代替)之类的。
当然要直接监视变量值是没办法的,得封装起来写访问器(setter中改变值的前/后调用回调函数)。
我以前写的(偷懒,只支持1个参数):http://code.google.com/p/yslib/source/browse/YFramework/include/YSLib/Core/yevt……
[/Quote]

用函数指针,回调,模拟事件代理机制,我觉得挺靠谱
Xinke_927846 2012-04-20
  • 打赏
  • 举报
回复
看来是要自己写了
FrankHB1989 2012-04-20
  • 打赏
  • 举报
回复
回调?可以。最简单就函数指针,要么用std::function(没C++11就boost代替)之类的。
当然要直接监视变量值是没办法的,得封装起来写访问器(setter中改变值的前/后调用回调函数)。
我以前写的(偷懒,只支持1个参数):http://code.google.com/p/yslib/source/browse/YFramework/include/YSLib/Core/yevt.hpp
更完善和复杂的实现见boost.signal。
Qt用的不是标准C++,用了自己的扩展。

oniisama 2012-04-20
  • 打赏
  • 举报
回复
观察者模式
muyi66 2012-04-20
  • 打赏
  • 举报
回复
muyi66 2012-04-20
  • 打赏
  • 举报
回复
楼主看看这个吧:C++实现事件机制
evencoming 2012-04-20
  • 打赏
  • 举报
回复
不过都图形界面了。肯定无法单纯的c++啊。
用QT,qt跨平台,你的代码也就跨平台了
evencoming 2012-04-20
  • 打赏
  • 举报
回复
没办法吧。
hen_hao_ji 2012-04-20
  • 打赏
  • 举报
回复
C++好像不行吧。。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧