C++实现C#的事件机制
C#的事件机制让C#程序员如鱼得水,尤其在架构的时候,事件驱动机制让弱耦合成为一种主流。但对于我们从事C++开发的程序员来说,心理甚是羡慕嫉妒恨,尤其像我这种半路从C#出家C++的。
本文实现的是C++模仿C#的事件。
与C#的事件机制表现形式比较:
相似点:采用+=、-=运算符实现事件注册注销工作
差异点:本文中使用事件的类,第一个成员变量必须是CObjectSender ,自定义事件类第一个成员变量必须为EventArgs。
测试类:
1 #include "stdafx.h"
2 #include <string>
3 #include <iostream>
4 #include <list>
5 #include "HunterEvent.h"
6 using namespace std;
7
8 // 事件参数
9 class MyEventArgs
10 {
11 public:
12 EventArgs args;
13 int age;
14 };
15
16 // 学生类,测试类
17 class Student
18 {
19 private:
20 ObejctSender sender;
21 int age;
22
23 public:
24 HunterEvent m_event;
25
26 // 设置年龄
27 void SetAge(int p)
28 {
29 age = p;
30 }
31
32 // 获取年龄
33 int GetAge()
34 {
35 return age;
36 }
37
38 // 事件触发器
39 void Trigger()
40 {
41 MyEventArgs arg;
42 arg.age = age;
43 m_event.Trigger(&sender, &arg.args);
44 }
45 };
46
47 void MMSSS(ObejctSender* sender, EventArgs* args)
48 {
49 int temp1 = ((Student*)sender)->age;
50 int temp2 = ((MyEventArgs*)args)->age;
51 cout<<"1111 sender "<<" eventargs "<<temp2<<'\n';
52 }
53
54 void SSSMM(ObejctSender* sender, EventArgs* args)
55 {
56 int temp1 = ((Student*)sender)->age;
57 int temp2 = ((MyEventArgs*)args)->age;
58 cout<<"2222 sender "<<" eventargs "<<temp2<<'\n';
59 }
60
61 int _tmain(int argc, _TCHAR* argv[])
62 {
63 cout<<"未绑定事件"<<'\n';
64 Student s;
65 s.Trigger();
66
67 cout<<sizeof(Student)<<'\n';
68
69 cout<<"绑定MMSSS事件,10岁"<<'\n';
70 s.SetAge(10);
71 s.m_event += MMSSS;
72 s.Trigger();
73
74
75 cout<<"绑定MMSSS与SSSMM事件,10岁"<<'\n';
76 s.m_event += SSSMM;
77 s.Trigger();
78
79 cout<<"绑定MMSSS与SSSMM事件,20岁"<<'\n';
80 s.SetAge(20);
81 s.Trigger();
82
83 cout<<"注销MMSSS事件,20岁"<<'\n';
84 s.m_event -= MMSSS;
85 s.Trigger();
86 system("PAUSE");
87 return 0;
88 }
运行结果:
源码下载地址:http://download.csdn.net/detail/fryhunter/3828019
作者 BLoodMaster
补充:软件开发 , C++ ,