来看看怎么在C++中实现回调吧。
Method1:使用全局函数作为回调
在C语言中的回调很方便。当然,我们可以在C++中使用类似于C方式的回调函数,也就是将全局函数定义为回调函数,然后再供我们调用。
typedef void(*pCalledFun)(int *);
void GetCallBack(pCalledFun parafun)
{
/*do something*/
}
如果我们想使用GetCallBack函数,那么就要实现一个pCalledFun类型的回调函数:
void funCallback(int *iNum)
{
/* do something */
}
然后,就可以直接把funCallback当作一个变量传递给GetCallBack,
GetCallBack(funCallback);
编译器可能会有几种调用规范。比如在Visual C++中,可以在函数类型前加_cdecl,_stdcall来表示其调用规范(默认为_cdecl)。调用规范影响编译器产生的给定函数名,参数传递的顺序(从右到左或从左到右),堆栈清理责任(调用者或者被调用者)以及参数传递机制(堆栈,CPU寄存器等)。