上面这份代码实现了C#的事件(可能假设有问题)

//myclass.h
#ifndef _MYCLASS_H_
#define _MYCLASS_H_
#include <string>
#include <iostream>
#include <vector>
#include "event.h"
typedef void(*EventHandler)();
class MyClass
{
public:
  MyClass(){}
  void FireEvent()
  {
   size_t nCount = AEvent.GetEvent().size();
   for (size_t i = 0 ; i < nCount ; i++)
   {
    (*(AEvent.GetEvent().at(i)))();
   } 
  }
public:
 event <EventHandler> AEvent;
};
#endif

  上面这份代码实现了C#的委托(可能假设有问题)

//main.cpp
#include "myclass.h "
void MyEventHandler()
{
 printf("This is a event! ");
}
void MyEventHandlor()
{
 printf("This is another event! ");
}
int main(int argc,char* argv[])
{
 MyClass Obj;
 Obj.AEvent += MyEventHandler;
 Obj.AEvent += MyEventHandlor;
 Obj.FireEvent();
 Obj.AEvent -= MyEventHandler;
 Obj.FireEvent();
 printf("Over! ");
 system("pause");
 return   0;
}

  上面这份代码用于测试

  三份代码实现了一个观察者模式,这儿的Subject是MyClass,Obverser是MyEventHandler()和MyEventHandlor()两个函数,形如Obj.AEvent += 函数指针是添加一个通知对象,-=是去掉一个通知对象,FireEvent()函数是执行通知的函数。

  分析与代码同在,谢谢观赏!