委托例子代码
来源:互联网 发布:java 解析方法签名 编辑:程序博客网 时间:2024/06/08 05:12
#include "stdio.h"
class CObject
{
};
class Event
{
public:
unsigned long EventType;
public:
Event(unsigned long EventType)
{
this->EventType = EventType;
}
};
class Handler
{
public:
virtual void Invoke(CObject* sender, Event* event) = 0;
};
class CSourceEvent : public Event
{
public:
char* sourceArg1;
public:
CSourceEvent(unsigned long EventType, char* arg1):Event(EventType)
{
sourceArg1 = arg1;
}
};
class CSource : public CObject
{
public:
char* name;
Event* event;
Handler* handler;
public:
CSource(char* name)
{
this->name = name;
this->event = new CSourceEvent(1, "strArg");
this->handler = 0;
}
void fire()
{
if(handler) handler->Invoke(this, event);
}
};
template<class T>
class EventHandler : public Handler
{
typedef void (T::*funptr)(CObject*, Event* event);
private:
T* obj;
funptr fun;
public:
virtual void Invoke(CObject* sender, Event* event)
{
(obj->*fun)(sender, event);
}
public:
EventHandler(T* obj, funptr fun)
{
this->obj = obj;
this->fun = fun;
}
};
class CProcessor
{
public:
char* name;
CSource* source;
public:
void OnEvent(CObject* sender, Event* event)
{
CSource* source = (CSource*)sender;
CSourceEvent* sourceEvent = (CSourceEvent*)event;
printf("Object %s Event %d with Arg %s Processed By %s", source->name, sourceEvent->EventType, sourceEvent->sourceArg1, this->name);
}
public:
CProcessor(char* msg)
{
name = msg;
source = new CSource("source1");
source->handler = new EventHandler<CProcessor>(this, &CProcessor::OnEvent);
}
};
int main()
{
CProcessor* processor = new CProcessor("processor1");
processor->source->fire();
return 0;
}
- 委托例子代码
- 委托例子
- 委托例子
- 委托的简单例子
- 委托的简单例子
- 事件委托的例子
- 委托的例子
- 泛型委托例子
- 委托的例子
- 简单委托例子
- C#委托例子
- 委托简单例子
- 事件委托小例子
- 一个委托的例子
- 委托+线程 使用例子
- C# 委托 例子
- 委托例子之二
- dojo 委托 delegate 例子
- A地址
- 用户sa登录失败,该用户与可信sql server连接无关联
- ASP中日期函数的大全
- 指针初始化
- ASP.NET AJAX布署到服务器上的问题
- 委托例子代码
- 急切呼唤一线直接决策
- 使用JS调用WebService
- FormatDateTime 函数
- 用javascript实现的10种图片特效
- 理解va_list、va_start、va_arg、va_end原理既使用方法
- 市场换技术==失败
- assert用法总结
- Loadrunner中的设置