C++之lambda表达式回调函数作为参数(一百四十)

news2024/11/15 23:38:58

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++11的lambda(即匿名函数)的回调函数作为参数传递的用法。

2.用法

#include <iostream>
using namespace std;

// 定义一个回调函数模板
template <typename Callback>
int test_lambda_callback(Callback callback) {
  // 调用传入的lambda表达式
  return callback(1,2);
}

template <typename Callback>
void test_lambda_callback_01(Callback callback) {
  // 调用传入的lambda表达式
  callback(1,2,3);
}


int bb = 30;
auto FuncAdd = [](int a, int b)->int {
  printf("xxx---------->%s(), line = %d, a = %d, b = %d, xx = %d\n",__FUNCTION__,__LINE__,a,b,bb);
  return a + b;
 };


int main() {
  //1.使用lambda表达式作为回调函数
  int sum = FuncAdd(2, 3);

  //2.外部变量值传递:[sum]
  test_lambda_callback([sum](int a, int b) {
    printf("xxx---------->%s(), line = %d, a = %d, b = %d, sum = %d\n",__FUNCTION__,__LINE__,a,b,sum);
    return a + b;
  });

  //3.外部变量引用传递:[&sum]
  test_lambda_callback([&sum](int a, int b) {
    printf("xxx---------->%s(), line = %d, a = %d, b = %d, sum = %d\n",__FUNCTION__,__LINE__,a,b,sum);
    return a + b;
  });

  //4.无返回值的情况:外部变量引用传递:[&sum]
  test_lambda_callback_01([&sum](int a, int b, int c) {
    printf("xxx---------->%s(), line = %d, a = %d, b = %d, c = %d, sum = %d\n",__FUNCTION__,__LINE__,a,b,c,sum);
  });

  return 0;
}

打印:
xxx---------->operator()(), line = 20, a = 2, b = 3, xx = 30
xxx---------->operator()(), line = 31, a = 1, b = 2, sum = 5
xxx---------->operator()(), line = 37, a = 1, b = 2, sum = 5
xxx---------->operator()(), line = 43, a = 1, b = 2, c = 3, sum = 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/696786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】matplotlib 绘制火山图、条形图

文章目录 火山图条形图 火山图 绘制火山图&#xff0c;输入是两个datafreme&#xff0c;行是样本名&#xff0c;列是基因名。使用T-test检验绘制基因表达情况。 def minmax_scale(data):import numpy as np# # 示例数据# data np.array([2, 4, 6, 8, 10])# 进行Min-Max标准化…

go并发编程之channel

目录 1.简介 2.channel类型 无缓冲区的channel 无缓冲区channel的创建 带缓冲区的channel 带缓冲区channel的创建 3.channel使用代码演示 4.获取channel中的值 ​编辑 5.单向channel 单向发送data&#xff0c;发送到channel中 单向接收&#xff0c;channel接收数据 6…

汇编的各种指令及使用方法

***************************************************************** 汇编中的符号 1.指令&#xff1a; 能够编译生成一条32位的机器码&#xff0c;且能被CPU识别和执行 2.伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若干条等效指令 3.伪操作&#xff1a…

Linux进程间通信——管道(下)

前文 一&#xff0c;什么是命名管道? 二&#xff0c;命名管道的基本原理 三&#xff0c;创建命名管道实现两个进程对写 四&#xff0c;匿名管道和命名管道的区别 总结 前文 上篇文章我们主要讲了匿名管道的定义以及基本原理&#xff0c;但是匿名管道有一个致命的缺陷&#…

HashSet、LinkedHashSet、TreeSet有什么区别

- HashSet、LinkedHashSet 和 TreeSet 都是 Set接口的实现类&#xff0c;都能保证元素唯一&#xff0c;并且都不是线程安全的。HashSet 的底层数据结构是哈希表&#xff08;基于 HashMap 实现&#xff09;&#xff0c;元素存入和取出顺序不一致。LinkedHashSet 的底层数据结构…

C++制作五子棋

正文 01 思路 我没有选择专业的五子棋棋型&#xff0c;用我自己的逻辑&#xff08;初高中玩五子棋的方法&#xff09;&#xff0c;去实现简单的人机对战。 首先因为要计算五子棋每一步的分数&#xff0c;那么你就要分析每一步形成的棋盘&#xff0c;以下图为例&#xff1a;…

蓝桥杯专题-试题版含答案-【风险度量】【括号配对问题】【ASCII码排序】【素数求和】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【Java高级编程】枚举类注解

枚举类&注解 1、枚举类的使用1.1、枚举类的使用1.2、如何定义枚举类1.3、Enum类的主要方法 2、注解的使用2.1、注解的概述2.2、常见的Annotation示例2.3、如何自定义注解&#xff1a;参照SuppressWarnings定义2.4、JDK提供的4种元注解2.5、JDK 8中注解的新特性&#xff1a;…

2023-06-25:redis中什么是缓存穿透?该如何解决?

2023-06-25&#xff1a;redis中什么是缓存穿透&#xff1f;该如何解决&#xff1f; 答案2023-06-25&#xff1a; 缓存穿透 缓存穿透指的是查询一个根本不存在的数据&#xff0c;在这种情况下&#xff0c;无论是缓存层还是存储层都无法命中。因此&#xff0c;每次请求都需要访…

关于C++图论树的某些题图形提示

一、去教室的路。 猫猫大学有n条路&#xff0c;每条路都有一个数字编号&#xff0c;其中的一条路一定与另外2条路相连&#xff0c;请你打出这个学校的地图。 输入1&#xff1a; 1 2 3 4 2 3 45 4 45 1 输出1&#xff1a; 1 2 3 4 5 45 图解 &#xff1…

动态住宅代理VS静态住宅代理,怎么选择?

现在&#xff0c;越来越多的海外代理服务商均支持动态住宅IP与静态住宅IP,很多小伙伴就疑惑&#xff0c;这二者有什么区别呢&#xff1f;哪个更好&#xff1f;其实&#xff0c;没有哪个更好&#xff0c;只有哪一个更合适您的业务。 无论动态住宅IP还是静态住宅IP都来自真实的住…

【软件测试】10道性能测试高频面试题,你能答上多少?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试包含了…

表格el-table多出一条横线,怎么解决(el-table表格下方多一条线的问题)

最近在写el-table表格的时候&#xff0c;发现的问题&#xff0c;表格多出一条横线&#xff0c; 可以看出其它行&#xff0c;都是正常显示&#xff0c;只有第7行多出一条横线&#xff0c;找了好久&#xff0c; 最后发现是el-table表格的伪元素&#xff0c;问题就出在这&#xf…

B站化播放量为播放时长,是谁的狂欢?

6月26日晚&#xff0c;B站举办了14周年庆典晚会。在晚会上&#xff0c;除了周深、美依礼芽同框献唱受到关注&#xff0c;B站董事长兼CEO陈睿的演讲内容同样值得深思&#xff1a; 一来&#xff0c;陈睿提到&#xff0c;要将目前B站视频前台显示的播放量数据从次数改为分钟数&am…

精进ARM计算架构,催生人工智能产业的巨大跨越

在优化ARM计算架构以支持人工智能应用方面&#xff0c;以下是一些常见的方法和技术&#xff1a; 算法和模型设计优化&#xff1a;选择合适的算法和模型结构对于在ARM架构上高效执行人工智能任务至关重要。设计轻量级的模型、减少冗余操作和参数量&#xff0c;使用适合ARM架构的…

【K8S系列】深入解析K8S调度

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记论点蓝色&#xff1a;用来标记论点 Kubernetes (k8s) 是一个容器编…

扩展ExtendedFloatingActionButton滚动收缩展开行为

效果 首先ExtendedFloatingActionButton有默认的Behavior : ExtendedFloatingActionButtonBehavior,这个类是为了ExtendedFloatingActionButton不被SnakBar所遮挡&#xff0c;并且这个类它是protected,所以为了保留原有的设计&#xff0c;自定义的Behavior不能在外部定义&#…

Go语言单元测试

1、Go语言单元测试 Go语言中的测试依赖 go test 命令&#xff0c;go test 命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录 内&#xff0c;所有以 _test.go 为后缀名的源代码文件都是 go test 测试的一部分&#xff0c;不会被 go build 编译到最终的可执行 文件…

【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

链接&#xff1a;https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwdabc1 利用爬虫抓取双色球开奖号码&#xff0c;获取完整数据&#xff0c;简洁45行代码实现&#xff0c;更新时间2023-06-28 这是网上的数据&#xff0c;怎么将它爬取下来 它将只爬取最近30期的双色球开…

星辰秘典:解开Python项目的神秘面纱——迷宫之星(迷宫探索与求解)

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;html css js&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;你好&#x…