一、回调概念

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数机制: 
1、定义一个函数(普通函数即可); 
2、将此函数的地址注册给调用者; 
3、特定的事件或条件发生时,调用者使用函数指针调用回调函数。

二、回调实现

#include <stdio.h>//函数指针,定义一个函数指针的原型,名称为:lpFunc,三个参数:void指针,char *,int
typedef void(*lpFunc)(void *,char *,int);  //调用回调函数的宿主函数,参数callback是原型名称为lpFunc的函数指针
void GetCallBack(void *lpVoid,lpFunc callback,char* name,int age){//执行回调函数callback,其实是调用通过形参callback实际传过来的函数fCallbackcallback(lpVoid,name,age);
}class A{
public:A(){};void outName(char szAlarm[],int age){printf("My name is %s,%d years old \n",szAlarm,age);}//定义一个类A的静态成员函数fCallbackstatic void fCallback(void *lpVoid,char szAlarm[],int age){//类A的成员函数中,使用类A定义一个对象指针p 指向传进来的指针参数lpVoid,强制类型转换为:A*A *p = (A*)(lpVoid);//A类型的对象指针 p调用 A类的成员寒素outNamep->outName(szAlarm,age);}//A类的成员函数Testvoid Test(){//在类A的成员函数Test中调用外部函数GetCallBack,将类A的静态成员函数fCallback名称传给第二个参数,实现fCallback函数的回调GetCallBack(this,fCallback,"kevin",38);}};int main(void)
{A a;a.Test();
}/*** 总结,想要使用回调函数* 1、首先要定义一个函数指针的原型,例如:typedef void(*lpFunc)(void *,char *,int); * 2、要定义一个或者已存在和这个函数指针原型相符合的函数,例如:static void fCallback(void *lpVoid,char szAlarm[],int age)* 3、要有调用回调函数的宿主函数,例如:void GetCallBack(void *lpVoid,lpFunc callback,char* name,int age)* 4、宿主函数去调用回调函数,例如:GetCallBack(this,fCallback,"kevin",38);* */

深度学习自学(二十八):Altas人脸SDK实现之-回调函数相关推荐

  1. 深度学习(二十八)基于多尺度深度网络的单幅图像深度估计

    基于多尺度深度网络的单幅图像深度估计 原文地址:http://blog.csdn.net/hjimce/article/details/50569474 作者:hjimce 一.相关理论 本篇博文主要 ...

  2. 深度学习(二十八)——SOM, Group Normalization, MobileNet, 花式卷积进阶

    RBM & DBN & Deep Autoencoder(续) DBN RBM不仅可以单独使用,也可以堆叠起来形成Deep Belief Nets(DBNs),其中每个RBM层都与其前 ...

  3. 深度学习自学(十):人脸检测android端-JNI调试调用底层检测识别库

    一.CmakeLists 1.原始CmakeLists #----------------指定 库文件名字(.so)和c++文件路径(可多个) add_library( # Sets the name ...

  4. 系统学习深度学习(二十八)--DSD

    论文:DSD: Dense-Sparse-Dense Training for Deep Neural Networks 论文链接:https://arxiv.org/pdf/1607.04381.p ...

  5. 深度学习自学(十八):caffe网络调试设置-调参相关技巧

    本文主要记录caffe调试配置超参数和网络结构相关参数. 1.use_global_stats Batch Normalization层中有个参数use_global_stats,它表示是否使用caf ...

  6. 花书+吴恩达深度学习(二十)构建模型策略(超参数调试、监督预训练、无监督预训练)

    目录 0. 前言 1. 学习率衰减 2. 调参策略 3. 贪心监督预训练 4. 贪心逐层无监督预训练 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十 ...

  7. JavaScript学习(二十八)—事件冒泡和事件捕获

    JavaScript学习(二十八)-事件冒泡和事件捕获 一.什么是事件流? 简单说,事件流就是指事件的执行顺序,他包含两种模式:事件冒泡.事件捕获. (一).事件冒泡 最常用的一种模式,就是指事件的执 ...

  8. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  9. 动手学深度学习(二十二)——GoogLeNet:CNN经典模型(五)

    文章目录 1. 含并行连结的网络(GoogLeNet) 1.1 Inception块 1.2 GoogLeNet模型 2. 动手实现简化的GoogLeNet模型 2.1 实现Inception块 2. ...

最新文章

  1. 黑龙江2020计算机一级考试时间,黑龙江2020年计算机等级考试报名时间汇总
  2. 26个导航设计非常独特的网站案例欣赏
  3. PMCAFF | 为什么我们必须关注95后市场?
  4. 自由自在意式手工冰淇淋走俏仲夏之季
  5. openshift安装部署_OpenShift 4 HOL (1) - 多种方法部署容器化应用
  6. 10.5 0819吉米牛逼
  7. 【LeetCode笔记】33. 搜索螺旋排序数组(Java、二分)
  8. 不同网段通过静态路由实现互通(强烈推荐)
  9. 脚本编辑$RANDOM 和 case语句 (笔记)
  10. Maven +Tomcat+m2eclipse的热部署(hot deploy)
  11. python面向对象的编程_不会面向对象,肯定学不好Python!简易的面向对象攻略来啦...
  12. 代码检查技术Checkstyle与p3c调研
  13. 如何在团队内做技术分享
  14. stm32f412新工程配置的记录
  15. 计算机科学教育英文论文题目,学生方面计算机相关的毕业论文,关于计算机专业英语课程教学改革和实践相关在职研究生毕业论文...
  16. idb 怎么回复mysql_mysql中的.idb文件 怎么正常显示
  17. 高可用pxc+rocketmq+es+redis+minio+keepalive+haproxy 实操
  18. 全系T*镀膜认证镜头 vivo X70系列夜拍体验再升级
  19. 【Web3 系列开发教程——创建你的第一个 NFT(9)】如何在手机钱包里查看你的 NFT
  20. 投影仪亚马逊审核标准FCC认证

热门文章

  1. WPF几个核心类的类层次结构
  2. linux基础命令游戏,LINUX-基础命令(三)
  3. mysql 5.622_新特新解读 | MySQL 8.0 对 count(*)的优化
  4. matebook14装鸿蒙系统,matebook14几个接口
  5. 流放之路进传送门显示服务器断线,资讯:特别改动 优化组队经验获取 降低断图风险...
  6. 用装饰器来进行登录验证
  7. Rplidar学习(三)—— ROS下进行rplidar调试
  8. Dapper Sqlpara where in
  9. Two Bases CodeForces - 602A (BigInteger c++long long也可以)
  10. OpenStack KVM环境搭建