callback.h
来自「这是一些c++例程」· C头文件 代码 · 共 90 行
H
90 行
#ifndef __CALLBACK_H__
#define __CALLBACK_H__
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#define CALLBACKLIST_INIT_SIZE 10
#define CALLBACKLIST_INCREMENT 5
class CallBack;
typedef void *CallData; // 回调数据指针类型定义
typedef void (CallBack::*CallBackFunction)(CallData); // 指向回调成员函数的指针
typedef void (*CallBackStaticFunction)(CallData); // 指向静态成员函数或普通函数的指针类型定义
class EventRecord
{
private:
char *eventName; //回调事件名称
CallBack *pointerToCBO; //指向回调对象的指针
union{ //指向成员函数的指针和指向静态成员函数(或普通函数)指针的共用体
CallBackFunction pointerToCBF;
CallBackStaticFunction pointerToCBSF;
};
public:
EventRecord(void); //事件记录类的缺省构造函数
EventRecord(char *ename,CallBack *pCBO,CallBackFunction pCBF); //构造包含成员函数的事件记录
EventRecord(char *ename,CallBackStaticFunction pCBSF); //构造包含静态成员函数或普通函数的事件记录
~EventRecord(void); //析构事件记录
void operator = (const EventRecord& er); //重载赋值运算符
int operator == (char *ename) const; //判断当前事件记录的事件名是否为ename
int operator == (const EventRecord& er) const; //判断当前事件记录是否和指定事件记录相等
void Flush(void); //将当前事件记录清空
int IsEmpty(void) const; //判断事件记录是否为空(即事件名是否为空)
friend class CallBack; //让CallBack类能访问EventRecord的私有成员;
};
class CallBack
{
private:
EventRecord *callBackList; //回调事件表
int curpos; //当前事件记录位置
int lastpos; //回调表中最后一空闲位置
int size; //回调表的大小
void MoveFirst(void) //将当前记录置为第一条记录
{
curpos = 0;
}
void MoveNext(void) //将下一条记录置为当前记录
{
if(curpos == lastpos)
return;
curpos++;
}
int EndOfList(void) const //判断回调表是否被遍历完
{
return curpos == lastpos;
}
public:
CallBack(void); //构造函数
CallBack(const CallBack& cb); //拷贝构造函数
~CallBack(void); //析构函数
void operator = (const CallBack& cb); // 重载赋值运算符
//将回调对象的成员函数、静态成员函数(或普通函数)注册为事件对象的回调函数
void AddCallBack(char *event,CallBackFunction cbf,CallBack *p);
void AddCallBack(char *event,CallBackStaticFunction cbsf);
//删除注册在指定事件上的回调函数
void RemoveCallBack(char *event,CallBackFunction cbf,CallBack *p);
void RemoveCallBack(char *event,CallBackStaticFunction cbsf);
// 删除某事件的全部记录
void RemoveCallBack(char *event);
//执行注册在某一事件上的所有回调函数
void CallCallBack(char *event, CallData calldata = NULL);
};
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?