首页 > 编程语言 >c++回调函数

c++回调函数

时间:2023-05-01 18:33:56浏览次数:35  
标签:调用 函数 静态 c++ 函数指针 回调

回调函数本质上也是普通函数,只是调用机制有所区别——首先通过传参的形式将该函数的地址传递给其他函数,然后在其他函数中通过函数指针调用该函数。在其他函数中通过函数指针调用该函数的过程称为回调,而作为被调用的该函数则被称为回调函数。

为什么需要回调函数?

满足接口兼容性

回调函数必须通过函数指针进行传递和调用,为了简化代码,一般会将函数指针起个别名,格式为:

typedef 返回值类型 (*指针名) (参数列表)

回调函数规避了必须在调用函数前声明的弊端,而且能够让用户直观地感受到自己定义的函数被调用。

 

需注意,普通c语言风格函数和类静态成员函数可以直接作为回调函数使用,而如果要将类非静态成员函数作为回调函数,需要将其进行封装,如

std::function<void(int)> cb = std::bind(&ClassX::func, this, placeholders::_1);

因为类非静态成员函数存在默认参数this指针,若直接去使用会使得参数类型不匹配。

 

转载文章:https://blog.csdn.net/qq_45311905/article/details/116504377

标签:调用,函数,静态,c++,函数指针,回调
From: https://www.cnblogs.com/Explosion556/p/17366816.html

相关文章

  • 10分钟搞定!C++类中构造函数和析构函数的完全指南
    一、初步认识构造函数1.什么是构造函数?要了解构造函数就要先了解一下,类的6个默认成员函数,如下图:构造函数:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有一个合适的初始值,并且在对象整个生命周期内只调用一次。通俗一点来......
  • C# 调用 C dll char* callback 设置回调函数不定参数
    1:C#调用返回字符串C++nativedll函数的注意事项:a:C++DLL的返回值,安全的做法是分配一个全局char数组,把要返回的char*复制到这个char数组中, charbuff[255];constchar*__stdcallReturnString(){strcpy(buff,"xxxxxxxxxxxxxxx");returnbuff;}......
  • 【c++】libtorch和qt和opencv部署
    https://blog.csdn.net/rglkt/article/details/125508634opencv和libtorch的兼容问题,只需要下载(cxx11ABI)即可关于slot报错问题:引入torch文件时使用这种办法#undefslots#include<torch/torch.h>#include<torch/script.h>#defineslotsQ_SLOTS命名空间的问题参......
  • chatGTP对js匿名函数的解答
    前言笔者在使用chatGTP的过程中发现它越来越聪明,它可以对一个问题连续的解答,也预示着chatGTP的出现,百度等搜索引擎的即将消亡,chatGTP是聪明的这令笔者是大吃一惊的下面是对chatGTP的问答内容chatGTP对js匿名函数的解答问1:能说说js中的匿名函数吗?答1:当函数没有名字时,我们称之......
  • 【web 开发基础】PHP自定义回调函数之call_user_func_array()
    前言从上一篇文章中我们了解到,回调函数是将一个函数作为参数传递到调用的函数中。如果在函数的格式说明中出现callback类型的参数,则该函数就是回调函数。虽然可以使用变量函数去声明自己的回调函数,不过我们通常大多还是会通过借助 call_user_func_array() 函数去实现。通过借助......
  • 用excel函数解析身份证中的出生年月
      首先我们观察上图,第二代身份证包括18位,其中7到14位代表这位公民的出生年月日,我们可以利用left()、right()函数嵌套使用获取出生年月。方法一:先获取身份证字符串右侧的12位,再从获取的字符串中获取左侧8位;=LEFT(RIGHT(C2,12),8) 方法二:先获取身份证字符串左侧的14位,再......
  • 函数指针与函数回调
     1、函数指针 C/C++中可以使用指针指向一段代码,这个指针就叫函数指针,假设有这样一段代码:#include<stdio.h>intfunc(inta){returna+1;}voidmain(){int(*f)(int)=func;printf("%p\n",f);}定义了一个函数func,然后使用指针变量f指向该函数,然后......
  • 用C/C++在Linux和Android NDK中获取设备的IP地址
    C/C++开发的获取设备IP地址的代码,下面链接中的版本是在Linuxx86-64环境中编译(Centos7.5)的,也可在其它版本的Linux中或者AndroidNDK('armeabi-v7a','arm64-v8a','x86','x86_64'等版本)中编译。下载地址(此版本须在Linuxx86-64环境中运行):金山文档https://kdocs.cn/l/cd4VM3e......
  • C/C++《程序设计基础II》[2023-04-30]
    C/C++《程序设计基础II》[2023-04-30]2022级计算机专业《程序设计基础II》小组项目作业作业要求:1.分小组完成,2-4人一组(每个题目后面有人数要求,见附件1);2.任课老师按小组分配任务;3.作业时长为1周;4.提交内容为:WORD文档,内容包括:题目内容、算法分析、代码实现(要求加注释)、运行结......
  • C++11完美转发及实现方法详解
    C++11标准为C++引入右值引用语法的同时,还解决了一个C++98/03标准长期存在的短板,即使用简单的方式即可在函数模板中实现参数的完美转发。那么,什么是完美转发?它为什么是C++98/03标准存在的一个短板?C++11标准又是如何为C++弥补这一短板的?别急,本节将就这些问题给读者做一一......