编程中的回调
软件模块之间总是存在一些接口,从调用方式上分三种:
1. 同步调用:
阻塞式调用,要等对方调用完毕后再调用;
2.异步调用:
类似于消息或事件,接口在接收到某种消息或发生某种事件时主动去通知调用方;
3.双向调用:
被调用接口在被调用时也会调用对方的接口;
双向调用机制就是回调机制。其实现方式分两种:
1.结构化编程:
通过回调函数实现。回调函数由调用方自己实现,供调用方使用;
2.面向对象的编程:
通过接口或者抽象类,用虚函数实现。即类A调用类B,类B又调用类A的某个方法;
本文主要讲回调函数的实现:
1.回调函数:
就是通过函数指针调用的函数。回调函数由自己实现,回调函数的指针作为参数传给另一个函数,当这个指针被用来调用函数时,就可以通过我们自己实现的回调函数实现一些功能。
回调函数不是由函数实现方直接调用的,而是在特定的时候由另一方调用的。
2.实现机制
1) :先定义一个函数
2) :自己实现这个函数(即回调函数),并且将此函数指针做为参数传递给调用者。
3) :当满足特定条件时,调用方通过函数指针调用回调函数对事件进行处理。
3.回调函数示例
Node* Search (Node* node ,int (*compare)(void const * ,void const *),void const* value )
{
while (node != NULL)
{
if (compare ( node->value ,value ) == 1)
{
return node;
}
else
{
node = node->next;
}
}
}
此处,compare函数就是回调函数,我们可以在回调函数中实现 int 、 float 、string 的比较,而当Search需要时可以传入其中一个的地址,与给定的value进行比较。
转载于:https://blog.51cto.com/murphy/1423042