编程中的回调

    软件模块之间总是存在一些接口,从调用方式上分三种:

    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进行比较。