回调函数就是一个通过函数指针调用的函数。假如把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,那么就是回调机制。A函数就是回调函数,而通常情况下,A函数是在系统符合你设定的条件下自动执行。

使用回调函数可以改善软件的结构,提供软件的复用性。

函数指针是一个指针,只是这个指针不像普通的指针指向一个变量,此时它指向的是一个函数,也就是它存储的是一个函数的指针。

C++的类成员函数不能像普通函数那样用于回调,因为每个成员函数都需要有一个对象实例去调用它。通常情况下,要实现成员函数作为回调函数,一种常用的方法就是把该成员函数设计为静态成员函数。

#include <iostream>typedef int(*Fun11)(int, int);
typedef float(*Fun12)(float, float);int min(int a, int b)
{return a < b ? a : b;;
}float max(float a, float b)
{return a > b ? a : b;
}int test1()
{Fun11 pFun1 = NULL;pFun1 = &min;int ret1 = pFun1(-1, 2);std::cout<<"min value is: "<<ret1<<std::endl;Fun12 pFun2 = NULL;pFun2 = &max;float ret2 = pFun2(3.4, -2.2);std::cout<<"max value is: "<<ret2<<std::endl;return 0;
}typedef void(*Fun2)(void*);class CallBack;
class CallBackTest;class CallBackTest {
public:CallBackTest() {}~CallBackTest() {}void registerProc(Fun2 fptr, void* arg = NULL){m_fptr = fptr;if (arg != NULL) {m_arg = arg;}}void doCallBack(){m_fptr(m_arg);}private:Fun2 m_fptr;void* m_arg;
};class CallBack {
public:CallBack(CallBackTest* t) : a(2){if (t) {t->registerProc((Fun2)display, this);}}~CallBack() {}static void display(void* _this = NULL){if (!_this) {return;}CallBack* pc = (CallBack*)_this;pc->a++;std::cout<<"a is "<<pc->a<<std::endl;}private:int a;
};int test2()
{//http://www.360doc.com/content/14/0825/13/15077656_404487615.shtmlCallBackTest* cbt = new CallBackTest();CallBack* cb = new CallBack(cbt);cbt->doCallBack();return 0;
}void callback31()
{ std::cout<<"this a callback function 31"<<std::endl;
} int callback32(int num)
{ std::cout<<"this input param value is: "<<num<<std::endl;return 0;
}void Caller31(void (*ptr)())
{ (*ptr)();
}void Caller32(int n, int (*ptr)(int))
{(*ptr)(n);
}int test3()
{ Caller31(callback31); Caller32(32, callback32);return 0;
} int main()
{test1();test2();test3();return 0;
}

回调函数在C/C++中的使用相关推荐

  1. 回调函数在replace方法中的应用

    处理字符串是项目中经常会遇到的问题,对于长度比较大的字符串如何作一次性处理是需要我们去考虑的,这里给个例子: 把字符串"get-element-by-id"变成"getE ...

  2. 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  3. PCL中将回调函数封装到类中

    这是类中的声明 private://点云回调函数 NuClearTask_MyPointCloudHandle//点云选择static void ps_callback(const pcl::visu ...

  4. vue的methods属性的方法中出现回调函数,在回调函数内部获取data中的数据

    在vue中,可能会遇到在methods属性中书写的方法中出现回调函数的情况,如以下代码: data(){return{gemometry: ""} } methods: {draw ...

  5. php回调函数和匿名函数吗,php回调函数_关于php中匿名函数与回调函数的详解

    摘要 腾兴网为您分享:关于php中匿名函数与回调函数的详解,壹学车,小天才,尚游戏,厦门百姓等软件知识,以及微信一键转发工具,幸运抽奖系统,文字识别app,垃圾清理管家,王者荣耀起名神器,叮咚出行,世 ...

  6. python mount回调函数_python requests模块中返回时间elapsed解析

    一.问题: Python 中requests库在发送http请求时相当方便好用,但在使用时一直受一个问题困扰,怎么才能查看请求时长呢? 自己写时间函数再相减?NO,这个方法肯定不行. 二.解决: 好吧 ...

  7. qt 回调函数设置界面_回调函数实现类似QT中信号机制(最简单)

    1. 定义回调接口类: class UIcallBack { public: virtual void onAppActivated() = 0; virtual void onShowMore() ...

  8. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  9. java 自定义函数的调用_Java/Android中的函数调用回调函数自定义回调函数

    在做Android自定义控件时遇到要自定义回调函数的问题,想想自己还暂时没有那么精深的技术,赶紧返过头回来再重新研究Java中回调函数的问题.然而不幸的是,网上太多杂乱的帖子和博客都是转来转去,而且都 ...

最新文章

  1. [干货]我如何考察面试者的机器学习水平
  2. VS2019安装Image Watch与失败解决方法
  3. 谈谈java的BlockingQueue
  4. [Codeforces]Codeforces Round #460 (Div. 2)
  5. 构建第一个Spring Boot2.0应用之项目创建(一)
  6. ubuntu 10.04 下驱动程序的hello word
  7. FactorBook:人和小鼠转录因子chip_seq数据库
  8. isPostBack解释
  9. 新概念第二册 Lesson 1 句子 结构 分析
  10. 计算机二级web知识点,计算机二级WEB考试主要考哪些内容?
  11. 【脚本】自动统计B站up主投稿视频时长
  12. Python爬虫入门教程07:腾讯视频弹幕爬取
  13. NER任务的精确评估指标P、R、F1
  14. 小程序实现老虎机抽奖动画
  15. 手机APP与机顶盒互通
  16. 如何利用渠道码活码精准引流
  17. 转载:KOF97东丈
  18. POJ 3470 Walls 已翻译
  19. 双色球投注区分为红球号码区和蓝球号码区,红球号码范围为 01~33,蓝球号码范围为 01~16。双色球每期从 33 个 红球中开出 6 个号码,从 16 个蓝球中开出 1 个号码作为中奖号码,双色球玩
  20. 语法分析:自上而下分析(递归下降分析法+预测分析法)

热门文章

  1. Linux那些事儿之我是Sysfs(6)文件系统
  2. java avl_Java底层实现AVL 平衡二叉树
  3. CUDA软件系统知识
  4. 【亲测可用】用Electron和electron-builder打包Vue项目为exe可执行文件安装包(不推荐,个人觉得没有VNISEdit和NW好用,而且有些配置文件还挺脑残!)
  5. VSCode设置合并行快捷键
  6. window环境Visual Studio配置:OpenCV,Eigen,jsoncpp
  7. OpenResty中的upstream healthcheck功能沉思录
  8. leetcode-455 分发饼干
  9. (一)七种AOP实现方法
  10. shell脚本编程学习笔记(四)shell操作数据库