回调函数

从今天起,天天都要写博客,一天一博客;

第一篇博客:《回调函数》

C++的回调函数,其实就是函数指针的应用!

要想弄清楚回调函数,必须先弄清楚函数指针。

发现nachos实验中就经常用到函数指针,以前听袁军讲,一片迷茫,搞懂之后一片开阔!

很多初学者都搞不懂,回调函数跟普通函数有什么区别,有什么用,下面借助源码来搞定它!

表 24.7. 回调函数示例:void func(void (*f)(void *), void *p);

调用者实现者
  1. 提供一个回调函数,再提供一个准备传给回调函数的参数。

  2. 把回调函数传给参数f,把准备传给回调函数的参数按void *类型传给参数p

  1. 在适当的时候根据调用者传来的函数指针f调用回调函数,将调用者传来的参数p转交给回调函数,即调用f(p);




#include "stdafx.h"




int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}


#include <iostream>
using namespace std;


typedef void (*CALLBACK)( int a, int b );


class CBase
{
public:
    CBase();


public:
    /*
    ** 注册回调函数
    **
    */
    void RegisterCallback( CALLBACK fun, int k, int j );


    /*
    ** 调用回调函数
    **
    */
    void CallCallback();


private:
    /*
    ** 成员变量:
    ** 分别保存回调函数指针
    ** 回调函数中的形参参数
    **
    */
    int m;
    int n;
    CALLBACK func;
};


CBase::CBase()
{
    func = NULL;
}


void CBase::RegisterCallback( CALLBACK fun, int k, int j )
{
    func = fun;
    m = k;
    n = j;


    return;
}


void CBase::CallCallback()
{
    func( m, n );


    return;
}


//


// 函数1
void fun1( int a, int b )
{
    cout << "fun1 is called" << endl;
    cout << a << " " << b << endl;
    cout << "*****************" << endl;


    return;
}


//


class CCall
{
public:
    /*
    ** 函数2,类中的函数
    ** 注意这是个静态函数
    */
    static void fun2( int a, int b );
};


void CCall::fun2( int a, int b )
{
    cout << "fun2 is called" << endl;
    cout << a << " " << b << endl;
    cout << "*****************" << endl;


    return;
}


//


void main(void)
{
    CBase bbbbb;
    bbbbb.RegisterCallback( fun1, 1, 2 );
    bbbbb.CallCallback();
    bbbbb.RegisterCallback( CCall::fun2, 10, 20 );
    bbbbb.CallCallback();
}


OK!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值