适应场景:classB 的实例作为classA类中的一个变量,classB 在运行中反而需要调用classA中的变量或者函数。

例如:相机的回调函数,classA为UI界面,classB 为相机SDK,classB 的实例作为classA类中的一个变量。classB 不断运行获取图片,并调用classA中的回调函数将图片显示在UI界面上。

思路:
classA include classB;
classA 通过classB中的函数registHeightCallbackB,FunA的指针和this指针传给classB;
classB调用FunA,并传入参数classA 的this指针;
classA 通过this指针调用classA 的函数;

#include "classB.h"
class classA
{public:classA();~classA();classB classB_;//回调函数,在C++中必须是static 静态函数,因为C++类成员函数自带一个this的函数参数,而使用静态函数则不再有这个问题static int funA(int a, void* contex);int publicFun(int aa);//classB 需要使用到的实际函数
};

C++类静态成员函数不需要调用非静态成员函数和非静态成员变量,所以这里需要传入this指针,用于调用classA自身的非静态成员函数和非静态成员变量

#include "classA.h"
classA::classA()
{classB_.registHeightCallbackB(funA, this);//注册回调函数 传入funA函数指针和this指针
}
classA::~classA()
{}int classA::funA(int a, void* contex)
{classA* classa = (classA*)contex;return classa->publicFun(a);
}
int classA::publicFun(int aa)
{return aa + 1;
}
typedef int(*callback)(int, void* contex);//定义回调函数原型
class classB
{public:classB();~classB();callback callback_;   //记录函数指针,用于调用void* contex_;      //记录classA的指针,用于传回给classAvoid funB();int registHeightCallbackB(callback callback, void* contex);//定义注册回调函数
};
#include "classB.h"
classB::classB()
{}
classB::~classB()
{}
void classB::funB()
{int a = callback_(6, contex_);//例子:在classB中调用classA中的funA函数,返回6+1=7
}
int classB::registHeightCallbackB(callback callback, void* contex)
{callback_ = callback;contex_ = contex;return 0;
}

参考文章:
C++回调函数使用心得:https://www.cnblogs.com/smartlife/articles/12519130.html
C++回调函数的基本理解和使用:https://blog.csdn.net/yidu_fanchen/article/details/80513359
回调函数(__stdcall):https://blog.csdn.net/songshu5555/article/details/46895231
类的静态成员变量和静态成员函数:https://www.cnblogs.com/songhe364826110/p/11546148.html

C++ 回调函数 例子相关推荐

  1. delphi 回调函数例子 用函数过程作为参数

    今天有个朋友问我怎么用函数或者过程作为函数的参数呢,我说网上有挺多的,然而他告诉我很多例子运行不起来,我搜了几个测试了下,不知道是不是我自己的软件版本的问题,运行不了,所以自己研究了下,把自己能运行的 ...

  2. 回调函数例子_Linux C - C基础篇八(函数)

    概念 函数可以被看作是一个由用户定义的一系列操作的集合.一般来说,函数用一个名字来表示.函数的操作数,称为参数,由一个位于括号中,并且用逗号分隔的参数列表指定,如果该函数没有参数需要传入,则这个列表为 ...

  3. JAVA回调函数的例子_javascript : 回调函数例子

    数字时钟 digital_clock.html Digital Clock // Define a function to display the current time function disp ...

  4. 【校招面试 之 C/C++】第15题 C 回调函数

    转自:https://segmentfault.com/a/1190000008293902 做略微改动 什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调函数就是一个通过函数指针调用的 ...

  5. JavaScript中的回调函数(callback)

    前言 callback,大家都知道是回调函数的意思.如果让你举些callback的例子,我相信你可以举出一堆.但callback的概念你知道吗?你自己在实际应用中能不能合理利用回调实现功能? 我们在平 ...

  6. 一文搞懂C语言回调函数

    转载自:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 博主:Rdou Typing 来源:segmentfault ...

  7. html js 回调函数,js中回调函数的学习笔记

    回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考. 回调函数原理: 我现在出发,到了通知你" ...

  8. 对于Python中回调函数的理解

    关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...

  9. JavaScript:回调函数(callback)

    前言 callback,大家都知道是回调函数的意思.如果让你举些callback的例子,我相信你可以举出一堆.但callback的概念你知道吗?你自己在实际应用中能不能合理利用回调实现功能? 我们在平 ...

  10. 秒懂函数回调机制,回调函数看这篇就够了

    什么是回调函数 友情提示:原理介绍部分摘自:https://www.jianshu.com/p/2f695d6fd64f 有一定基础的直接跳过即可,直接查看后面精彩部分... 回调函数就是一个通过函数 ...

最新文章

  1. System.Security.Cryptography.CryptographicException: 用户的配置文件是临时配置文件 解决方案...
  2. python爬虫正则表达式实例-python爬虫 正则表达式解析
  3. (转)Windows重启延迟删除,重命名技术原理
  4. 用ABAP来实现柱状图和饼状图的输出
  5. 问题:org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0
  6. Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
  7. 简述linux系统的安全性,Linux操作系统的安全性有哪些过人之处
  8. 信息学奥赛一本通(1246:膨胀的木棍)
  9. iOS高级-QuartzCore框架-背景平铺
  10. github网页链接
  11. 近期工作:规则引擎/专家系统
  12. scrapy猫眼爬虫
  13. flex align-center:center多行垂直方向居中 align-items:center垂直方向单行居中
  14. 中国传统节日端午节网页HTML代码 学生网页课程设计期末作业下载 春节大学生网页设计制作成品下载 DW春节节日网页作业代码下载
  15. windows上传ipa文件到苹果开发者中心的教程
  16. 图片合成雾的方法概述
  17. blender学习日志
  18. 爬虫之旅(一):爬取b站首页的源代码
  19. Unity3D IAP Google支付
  20. thinkphp ajax 跨域请求 Access-Control-Allow-Origin 完美解决

热门文章

  1. 十个随机数排列(vb代码)
  2. 我的世界服务器显示红心,我的世界手机版红心怎么恢复 | 手游网游页游攻略大全...
  3. WPS2000系列之二样式管理(转)
  4. qemu安装WindowsXP和Windows2000
  5. 【测试沉思录】3. 如何测试微信公众号?
  6. Android fastboot下载模式或reboot流程解析
  7. 波的散射,孔金瓯等著三卷本书籍目录
  8. 小米bl未解锁变砖了如何刷机_如何正确刷机
  9. 小米浏览器导出html,小米浏览器离线视频如何导出 小米浏览器离线视频导出教程...
  10. 虚拟化管理软件比较(Eucalyptus, OpenNebula, OpenStack, OpenQRM, XenServer, Oracle VM, CloudStack, ConVirt)