C++之std::function和lambda表达式回调函数(一百五十二)

news/2024/11/19 19:45:34/

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

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

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

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

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之std::function和lambda表达式回调函数与函数指针的区别,类型不同。
注意:应用实例的v1.0和v2.0区别。

2.应用实例

v1.0

#include <iostream>
#include <functional>
#include <string>
using namespace std;//using和typdef都是起别名: 将函数类型起一个新的别名,作用一样;将别名类型interfaceDescriptor_cb作为参数传入interfaceDescriptor函数.//v1.0: using定义函数指针的别名
using interfaceDescriptor_cb = std::function<void(const string& descriptor)>;//引用传递
//using interfaceDescriptor_cb = std::function<void(string descriptor)>;//值传递//v2.0: typedef定义函数指针的别名
//typedef std::function<void(const string& descriptor)> interfaceDescriptor_cb;void interfaceDescriptor(interfaceDescriptor_cb _hidl_cb){_hidl_cb(string("android.frameworks.cameraservice.service@2.2::ICameraService"));
}void test(const std::string& desc){printf("xxx------>%s(), line = %d, desc_name = %s\n",__FUNCTION__,__LINE__, desc.c_str());
}int main() {//v1.0: 使用lambda表示调用, &引用传递 。interfaceDescriptor([](const string& desc) {printf("xxx------>%s(), line = %d, desc_name = %s\n",__FUNCTION__,__LINE__, desc.c_str());});/*lambda表达式:即匿名函数.本质是:让函数指针interfaceDescriptor_cb指向([](const string& desc) { printf("desc_name = %s\n", desc.c_str());})lambda表达式的匿名函数.本质还是一个函数指针指向一个匿名函数而已.*///v2.0:直接使用传递,而不用lambda表达式.interfaceDescriptor(test);//v3.0: 值传递// interfaceDescriptor([](string descriptor) {//   printf("desc_name = %s\n", desc.c_str());// });return 0;
}

v2.0

#include <iostream>
#include <functional>
#include <string>void interfaceDescriptor(std::function<void(const std::string& descriptor)> _hidl_cb){_hidl_cb("android.frameworks.cameraservice.service@2.2::ICameraService");
}void test(const std::string& desc){std::cout << "xxx------>" << __FUNCTION__ << "(), line = " << __LINE__ << ", desc_name = " << desc << std::endl;
}int main() {//v1.0interfaceDescriptor(test);//v2.0interfaceDescriptor([](const std::string& desc) {printf("xxx------>%s(), line = %d, desc_name = %s\n",__FUNCTION__,__LINE__, desc.c_str());});return 0;
}

http://www.ppmy.cn/news/789056.html

相关文章

css:鼠标经过el-dropdown 组件上会出现一个蓝色的小框

问题描述 效果如下&#xff0c;原以为是浏览器的bug&#xff0c;升级后就好了&#xff0c;没想到一直有这个问题 页面刷新后&#xff0c;鼠标经过el-dropdown 组件上会出现一个蓝色的小框 原因 浏览器默认有一个样式&#xff0c;加了一个边框 :focus-visible {outline: -we…

docker容器内安装ps命令

apt-get update apt-get install procps

安装PS出现“由于找不到VCRUNTIME 140_1.dll”的解决方法

安装PS出现“由于找不到VCRUNTIME 140_1.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题”的解决方法 这是缺少运行库的问题&#xff0c;分享个B站视频链接&#xff0c;UP主讲了解决方法&#xff0c;我的已经解决了&#xff1a;https://www.bilibili.com/vide…

win7安装PS2019CC启动时报d3dcompiler_47.dll的问题解决

原先安装的PS2017太卡顿了&#xff0c;有些功能用的也不习惯&#xff0c;卸载准备重装一下PS2019&#xff0c;在安装时发现报错&#xff0c;具体如下图所示&#xff1a; 因此在网上下载了D3DCOMPILER_47.dll程序&#xff0c;放到了指定文件夹还是不行。 百度参考这个解决了&am…

如何解决M1芯片安装PS 2021闪退、卡启动界面的问题?

2021版Photoshop版M1可以使用了&#xff0c;具体怎么安装呢&#xff0c;本文将介绍m1芯片安装ps2021的方法。如果安装过错出现问题&#xff0c;本文将介绍M1 芯片安装 PS 2021 闪退、卡启动界面解决方法。 总共四步 第一步&#xff1a;版本升级到bigsur11.3 第二步安装ps2021&…

m1芯片安装PS2021 已经支持M1芯片安装 M1处理器安装PS2021解决方案教程,2021最新方法!

4月份更新消息 TNT团队已发布&#xff1a;适配M1芯片MAC版的PS 2021来了&#xff0c;转眼购买M1芯片版的macbook pro已经两个多月了&#xff0c;之前因为这款芯片的特殊性&#xff0c;一直没能用上PS&#xff0c;之前在网上找的PS安装大部分都不行&#xff0c;不仅如此&#xf…

M1 Mac安装 PS 2021 闪退、卡启动界面解决方法

2021版Photoshop版M1可以使用了&#xff0c;具体怎么安装呢&#xff0c;本文将介绍m1 Mac安装ps2021的方法。如果安装过错出现问题&#xff0c;本文将介绍M1 Mac安装 PS 2021 闪退、卡启动界面解决方法。 第一步&#xff1a;版本升级到bigsur11.3 第二步安装ps2021 第三步&am…

教你解决M1芯片MAC安装PS2021卡在启动屏幕,完美解决PS21卡启动屏幕

自从最近M1芯片的版本更新和PS更新&#xff0c;我们M1用户终于可以在M1芯片上安装PS2020以上的完美激活版本了&#xff01;但是&#xff0c;可能很多小伙伴下载的M1芯片Mac安装PS2020和PS2021的安装包第一时间都安装后&#xff0c;都出现了打开PS 一直卡在启动页界面&#xff0…