C++回调函数的基本理解和使用

深度解析回调函数(易懂) 深度解析回调函数(易懂--适合收藏) 阅读详情

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
https://baike.baidu.com/item/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0/7545973?fr=aladdin
回调函数机制:
1、定义一个函数(普通函数即可);
2、将此函数的地址注册给调用者;
3、特定的事件或条件发生时,调用者使用函数指针调用回调函数。
注:为什么要特定事件或条件发生?不应该随时都可以调用回调函数吗?
以下是回调函数的两种使用方式(简单理解):
1、

#include <stdio.h>
typedef int(*callback)(int,int);

int add(int a,int b,callback p){
    return (*p)(a,b);
}

int add(int a,int b){
    return a+b;
}
int main(int argc,char *args[]){
    int res = add(4,2,add);
    printf("%d\n",res);
    return 0;
}

在这个例子中,可以看到,我们定义了一个callbak的函数指针,参数为两个int,返回值为int,通过调用函数地址来进行简单的相加运算。
2、

#include <stdio.h>
typedef int (callBack)(const void *buffer,size_t size,char *p_out);

void callFunc(callBack *consume_bytes, char *p_out) {
    printf("callFunc\n");
    const void *buffer = NULL;
    consume_bytes(buffer,0,p_out); //传入值可以随便填
}

int callBackFunc(const void *buffer, size_t size, char *p_out){
    printf("callBackFunc\n");
    memset(p_out,0x00,sizeof(char)*100);
    strcpy(p_out,"encoderCallback:this is string.");
    return 1;
}

int main(int argc,char *args[]){
    char p_out[100];
    callFunc(callBackFunc,p_out);
    printf("%s\n",p_out);
    return 0;
}

可以把回调函数和调用函数封装承类再调用。

什么是函数回调?如何使用函数回调机制? 函数回调是一种将函数作为参数传递给另一个函数,并在后者内部执行的机制。简而言之,它允许你动态地决定在什么时候调用哪个函数。事件处理:当特定事件发生时,调用相应的回调函数来处理事件。排序和过滤:在排序或过滤数据时,将自定义比较函数传递给排序或过滤函数。执行特定操作:根据条件执行不同的操作,而不需要大量的条件语句。然后,你需要定义一个函数指针,用于存储回调函数的地址。函数指针的类型必须与回调函数的原型匹配。这个函数指针callback可以存储一个接受两个指向常量数据的指针并返回整数的函数的地址。 阅读详情

相关推荐

C语言:回调函数

延迟执行:回调函数在特定条件触发后才被执行,而非立即执行,这对于异步编程尤为重要,如网络请求、定时任务等。松耦合:通过回调函数,调用方和被调用方之间解耦,调用方无需了解被调用方的具体实现,只需要提供符合约定的回调函数接口即可。事件驱动:回调函数广泛应用于事件驱动编程中,例如窗口系统、GUI编程、Web前端JavaScript中的事件监听等,当事件触发时,预先定义好的回调函数会被调用。多态性和扩展性:回调函数允许用户自定义行为,增强了程序的多态性和扩展性。例如,在C语言中,通过函数指针传递回调函数;

qq_56146092的博客 3561

回调函数(callback)是什么?一文理解回调函数(callback)

回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。回调函数通常用于事件处理、异步编程和处理各种操作系统和框架的API。回调:指被传入到另一个函数的函数。异步编程:指在代码执行时不会阻塞程序运行的方式。事件驱动:指程序的执行是由外部事件触发而不是顺序执行的方式。回调函数的定义:回调函数是一个作为参数传递给其他函数的函数,它能够被异步调用以处理某些事件或完成某些任务。

Lion_Long的博客 7万+

C++回调函数使用心得

C++回调函数使用心得前言回调函数也是普通函数C回调函数C++回调函数使用场景描述C++回调函数定义静态成员函数访问非静态成员函数的方法回调对象更复杂的讨论 前言 关于C++回调函数的介绍网上有很多,要知道它的概念很容易,难的是灵活应用,这里就笔者遇到的一个使用场景对回调函数进行一个简单的介绍,如果能对您有所帮助是我的荣幸。本文不会对C++回调函数的基础知识做过多的介绍,若对其概念不够理解的,笔者...

sinat_38183777的博客 2万+

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

什么是回调函数 友情提示:原理介绍部分摘自:https://www.jianshu.com/p/2f695d6fd64f有一定基础的直接跳过即可,直接查看后面精彩部分...回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的...

tiandiren111的专栏 2万+

cpp-httplib的下载和使用

(也称为httplib)是一个基于C++的轻量级HTTP框架,它提供了简单易用的API,用于创建HTTP服务器和客户端。并且是采用的select多路复用+线程池的方式响应请求,读取请求,放到业务线程池对于业务处理,同时还支持切换多路复用的方式。默认情况下,由于其广泛的支持,使用了select系统调用。如果你希望使用poll,可以通过设置实现。本篇章是在原作者的基础上稍加上了我自己的对源码的理解,具体细节请看原作者。

木牛的博客 344

C++|function、bind回调函数用法总结

C++ function回调函数用法总结

3D视觉工坊 727

C++ Qt 中在静态函数中发信号的方式及回调函数的基本使用详解

C++ Qt 中在静态函数中发信号的方式及回调函数的基本使用详解 去发现同类优质开源项目:https://gitcode.com/ 本文详细介绍了在 C++ Qt 框架中,如何在静态函数中发送信号以及如何使用回调函数。内容深入浅出,旨在帮助开发者更好地理解和运用 Qt 的信号与槽机制,提升编程效率。 内容概述 Qt 信号与槽机制简介 静态函数中发送信号的方法 回调函数的基本使用方式 实例分析 ...

gitblog_06729的博客 682

Unity3D Pico VR 手势交互实战:基于MRTK3实现抓握与射线控制

本文针对Pico VR原生手势交互功能不足的问题,提供了基于MRTK3实现高级手势交互的实战解决方案。通过将MRTK3成熟的交互框架与Pico的手势追踪能力相结合,详细讲解了从环境配置、SDK导入、核心适配到真机调试的全流程,帮助开发者高效实现抓握与射线控制等复杂交互,有效提升Pico VR应用的开发效率与体验。

weixin_29011667的博客 367

C/C++之回调函数

 转自:http://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 今天讨论下C/C++中的回调函数。      在理解“回调函数”之前,首先讨论下函数指针的概念。 函数指针 (1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行...

iwilldoitx的博客 203

C/C++之回调函数介绍

  之前对于C/C++的回调函数不是很理解,今天就来学习下C/C++中的回调函数。   在理解回调函数之前,首先讨论下函数指针的概念。 函数指针: 1. 概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的事物都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向他。函数是存放在内存代码区域内的,他们同样有地址,因此同样可以用指针来存取函数,把这个指向...

weixin_30722589的博客 74

激光光束质量评估与光斑尺寸计算:从理论到MATLAB实践

本文详细解析激光光束质量评估与光斑尺寸计算的理论基础及MATLAB实践方法,重点介绍M²因子的测量与应用。通过高斯光束模型、CCD成像法和MATLAB算法实现,帮助读者掌握从理论到实践的完整流程,提升激光系统调试与评估能力。

weixin_29083373的博客 394

C++窗体程序设计(一)窗体类WNDCLASSEX

(本文使用VS2017) 在初步学习了c++之后,我们可以着手设计一个窗口类程序,但在这之前,我们得知道c++里面是怎么设计窗口的。 开始创建窗口之前,我们需要包含几个关键的头文件: #include <windows.h> #include <stdlib.h> #include <tchar.h> 当然,如果你和我一样,是这么创建的,那么VS2017会自动...

zzwfans的博客 2万+

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 309

c#字符串按位转成asc_使用PInvoke互操作,让C#和C++愉快的交互优势互补

一:背景 1. 讲故事 如果你常翻看FCL的源码,你会发现这里面有不少方法借助了C/C++的力量让C#更快更强悍,如下所示: [DllImport("QCall", CharSet = CharSet.Unicode)] [SecurityCritical] [SuppressUnmanagedCodeSecurity] private static extern ...

weixin_39954889的博客 86

笔记:回调函数使用

// void fun(..., ctx__) { A* p = (A*)ctx__; ....... } // class B { setcallback(callback cb_, callbackctx ctx_); start(); callback cb; callbackctx ctx; } B::setcallback(callba

zxw_tiantan的博客 392

LaTeX新手入门以及TeXlive和TeXstudio的安装使用

作为一个新手,LaTeX的了解和使用很是费了一番功夫,因此,在这里给找不到路的同志们稍微介绍一下。如有错误,敬请指正。本篇内容基于Win10系统,因此安装在Mac或者Linux上的同学可以再找找其他的介绍文章。 目录 LaTeX介绍 LaTeX环境配置 一、TeXlive下载 二、TeXlive安装 1. 安装main installer 2. 正式安装 三、TeXstudio安装...

zywhehe的博客 21万+

C/C++ ptr指针,内存

【代码】C/C++ ptr指针,内存。

ChenYm_的博客 546

从零开始:如何在Windows上搭建Airsim仿真环境(避坑指南)

本文是一份详细的Windows平台AirSim仿真环境搭建指南。文章从硬件要求、Visual Studio与虚幻引擎安装开始,逐步讲解AirSim插件编译、UE项目配置,并重点介绍了通过WSL2连接PX4飞控软件实现软件在环仿真的完整流程。内容涵盖常见问题排查与性能优化,旨在帮助开发者避开常见陷阱,高效构建可用于无人机算法开发的虚拟测试平台。

earth的博客 275

node-ffi使用指南

在nodejs/elctron中,可以通过node-ffi,通过Foreign Function Interface调用动态链接库,俗称调DLL,实现调用C/C++代码,从而实现许多node不好实现的功能,或复用诸多已实现的函数功能。 node-ffi是一个用于使用纯JavaScript加载和调用动态库的Node.js插件。它可以用来在不编写任何C ++代码的情况下创建与本地DLL库的绑定。同时...

weixin_34074740的博客 6986
上一篇: C++ fork函数理解
一度凡尘
博客等级 码龄15年 45粉丝 50原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值