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 + -
显示快捷键?