C++的回调函数的简单实现

本文介绍了C++中回调函数的实现方式,包括C语言风格的回调、类成员函数作为回调、使用boost库以及多态机制实现回调。通过实例展示了如何在不同场景下使用回调处理异步网络数据通信和订阅问题。
摘要由CSDN通过智能技术生成
在网络消息处理中经常要用到回调机制,有的是来处理异步网络数据通信问题(摄器模式),有的是来处理订阅问题(观察者模式)。
在C/C++开发用用的很多,一下是一些简单的例子(部分例子代码不全,需自行补全)
一、C的回调函数是比较简单的,
例如: 
int myFunction(int num)
{
printf("myFunction num:%d\n",num);
return -1;
}

//定义FUNC类型是一个指向函数的指针
//params[in]为int类型
//return为int类型
typedef int (*FUNC)(int);

int _tmain(int argc, _TCHAR* argv[])
{
FUNC callback = (FUNC)&myFunction;
int num = 10;
callback(10);
return 0;
}
执行结果:myFunction num:10

二、对于C++来说如何实现回调函数呢?
1、最原始的方法我们可以在类外定义全局的函数实现回调,参数上通过传递this指针来达到处理当前对象的一些业务。
例如:

typedef bool (*FUNC1)(void* pCFunc);

bool onGetFunName(void* pCFunc)
{
if(pCFunc != NULL)
{
CFunc* fuc = (CFunc*)pCFunc;
bool ret = fuc->getName();
printf("name is:%d\n", ret);
return true;
}
return false;
}

CFunc::CFunc(void)
{
}

CFunc::~CFunc(void)
{
}

bool CFunc::getName()
{
printf("getName ");
return true;
}

bool CFunc::showName()
{
FUNC1 callback = (FUNC1)&onGetFunName;
return onGetFunName(this);
}

执行结果:getName name is:1

2、一般来说我们更想让对象之前共享一个回调函数,所以很多时候用类函数来实现回调函数,例如我们一个简单的线程测试类:

//***************************************************************//
class MyThread
{
public:
M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值