c++ 的事件驱动

一开始的回忆 2014-03-14 01:11:09
1.要求可移植
之前公司有一个挺好用,但是代码不共享.当时又没有研究下,现在想研究下.
使用如下
比如有一个(不定参,不定数据类型)
void a1(int a,int b);
void a2(short a,byte b);
void a3(string& m,int n,short t);
然后可以使用注册函数注册
registerMsg("event_t1",a1);
registerMsg("event_t2",a1);
registerMsg("event_t3",a1);
注册完之后,在需要调用的地方.使用(i表示int,s表示short,b表示byte,c表示字符串)
这里有个相当于boost的any类
sendmsg("event_t1","ii",any(5),any(6)); 这里执行,就会调用到a1(5,6),具体这个函数怎么实现?
sendmsg("event_t2","sb",any(5),any(6));
sendmsg("event_t3","cis",any(5),any(6),any("test"));
这样就可以实现回调了,自己想写个,总是有卡住的地方,麻烦高手给写个简单的例子.
class Any(大致如下)
{
...
union
{
int a,
short b,
byte c,
char* d,
}
}
谁能按照上面的调用思路写一个,c++的.汇编的不考虑,看了好多回调方面的,都无法实现.
主要卡在,怎么实现回调.我能解析出每个的参数,但是还是无法去调用函数.
求代码.如果有满意的答复,直接加分.希望大神出现
...全文
289 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
buyong 2014-03-14
  • 打赏
  • 举报
回复
how about boost::signal, slot?
JiMoKuangXiangQu 2014-03-14
  • 打赏
  • 举报
回复
记录字符串为键,函数地址为值的map应该就可以了。 个人建议,仅供参考。
一开始的回忆 2014-03-14
  • 打赏
  • 举报
回复
代表参数,可以解析出来需要多少个参数 ii表示第一个参数是int类型,第二个参数是int类型 "sb", 第一个:short,第二个bool "cis"第一个char*,第二个int,第三个short
一开始的回忆 2014-03-14
  • 打赏
  • 举报
回复
引用 4 楼 JiMoKuangXiangQu 的回复:
[quote=引用 3 楼 SyzCools 的回复:] 麻烦写点代码,出来.自己搞了,好久.没弄出来. 用boost也行,见代码.
请问LZ的:
sendmsg("event_t1","ii",any(5),any(6));                           这里执行,就会调用到a1(5,6),具体这个函数怎么实现?
sendmsg("event_t2","sb",any(5),any(6));
sendmsg("event_t3","cis",any(5),any(6),any("test"));
. 第1个参数为事件名; . 第2个参数("ii","sb", "cis")分别是什么含义呢? . 以any包含的参数应该是传给函数的参数。 如果不自己写个预处理的工具,同时不提供额外的信息给出参数的个数的话,似乎无法实现。[/quote] 你提问的是 这个代表参数
jiandingzhe 2014-03-14
  • 打赏
  • 举报
回复
事件与主循环的库还是有不少的。记得有个叫libevent的库,好像还有个叫ev的库。另外GNU的Glib提供了主循环和一些简单的事件功能。Gobject提供了更复杂一些的,不过Gobject整个概念很坑。 你自己google一下event library吧。
JiMoKuangXiangQu 2014-03-14
  • 打赏
  • 举报
回复
引用 3 楼 SyzCools 的回复:
麻烦写点代码,出来.自己搞了,好久.没弄出来. 用boost也行,见代码.
请问LZ的:
sendmsg("event_t1","ii",any(5),any(6));                           这里执行,就会调用到a1(5,6),具体这个函数怎么实现?
sendmsg("event_t2","sb",any(5),any(6));
sendmsg("event_t3","cis",any(5),any(6),any("test"));
. 第1个参数为事件名; . 第2个参数("ii","sb", "cis")分别是什么含义呢? . 以any包含的参数应该是传给函数的参数。 如果不自己写个预处理的工具,同时不提供额外的信息给出参数的个数的话,似乎无法实现。
一开始的回忆 2014-03-14
  • 打赏
  • 举报
回复
麻烦写点代码,出来.自己搞了,好久.没弄出来. 用boost也行,见代码.

65,208

社区成员

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

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