C++的lambda函数、bind函数、类函数绑定参数,学习测试用例

在C++中,Lambda函数、std::bind 和类函数绑定参数提供了灵活的方式来处理函数调用。

  • Lambda函数是一种匿名函数,可以捕获外部变量并在函数体内使用。它们提供了简洁而强大的方式来定义内联函数。
  • std::bind 用于创建一个新的函数对象,其中部分参数被绑定到固定值,从而减少调用时需要传递的参数数量。
  • 类成员函数可以通过 std::bind 或Lambda表达式进行绑定,允许部分或全部参数提前绑定。

以下代码展示了如何使用Lambda表达式、std::function 和 std::bind 处理普通函数、多参数函数以及类成员函数的绑定和调用。

#include <iostream>
#include <functional>// 普通函数
void f1(int x) {std::cout << "Value: " << x << std::endl;
}
void f1_func(){// 使用std::function包装函数指针std::function<void(int)> func = f1;// 调用函数func(1);// 使用std::function包装Lambda表达式std::function<void(int)> lambdaFunc = [](int x) {f1(x);};// 调用LambdalambdaFunc(2);
}// 带有多个参数的函数
float f3(int x, int y, int z) {std::cout << "Sum: " << (x + y + z) << std::endl;return float(x+y+z);
}int f3_bind() {// 使用std::bind绑定函数的部分参数,只留下一个参数auto boundFunc = std::bind(f3, std::placeholders::_1, 1, -1);// 调用绑定的函数,只需要传递一个参数return boundFunc(3); // 输出: Sum: 3
}
int f3_lambda() {int b=2,c=-1;// 使用std::function包装Lambda表达式std::function<float(int)> lambdaFunc = [b,c](int x) {return f3(x,b,c);};// 调用绑定的函数,只需要传递一个参数return int(lambdaFunc(3)); // 输出: Sum: 4
}class MyClass {
private:int z=-6;
public:float mf2(int x, int y) const {std::cout << "Sum: " << (x + y+z)/2 << std::endl;return float((x+y+z)/2.);}int self_mf2(int x){int b=4;// 使用Lambda表达式绑定对象、参数输入,调用类函数std::function<float(int)> mf1 = [this,b](int x){return this->mf2(x,b);};return mf1(x);}
};
int mf_bind(MyClass *obj){// 使用std::bind绑定成员函数、对象、指定参数输入auto boundMemberFunc = std::bind(&MyClass::mf2, obj, std::placeholders::_1, 4);return boundMemberFunc(12); // 输出: Sum: 5
}
int mf_lambda(MyClass &obj){// 使用Lambda表达式绑定成员函数、对象、指定参数输入auto boundMemberFunc = [obj](int x) {return obj.mf2(x, 4);};return boundMemberFunc(14); // 输出: Sum: 6
}
int main() {f1_func();f3_bind();f3_lambda();MyClass obj;mf_bind(&obj);mf_lambda(obj);obj.self_mf2(16);// 输出: Sum: 7return 0;
}

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

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

相关文章

2024电工杯数学建模B题高质量成品论文,包括代码数据

2024电工杯数学建模B题高质量成品论文&#xff0c;包括代码数据 完整内容见文末名片 摘要 大学时期是学生们知识学习和身体成长的重要阶段&#xff0c;良好的饮食习惯对于促进生长发育和保证身体健康具有重要意义。针对当前大学生中存在的饮食结构不合理及不良饮食习惯的问题…

为了性能,放弃tft_eSPI,选择arduino_gfx吧

本来对于tft_espi和arduino_gfx没啥特别的感觉&#xff0c;都是tft屏幕驱动,arduino_gfx的好处就是除了支持tft外还支持一些oled屏幕。 谁知道在探寻我那个在单片机项目上显示中文方案 https://github.com/StarCompute/tftziku 时候&#xff0c;寻求极致性能测了一些东西。 t…

23种设计模式之一————工厂模式详细讲解

工厂模式介绍 定义分类工厂模式核心角色&#xff1a;简单工厂模式定义特点优点缺点应用场景代码实现 工厂方法模式&#xff08;别名&#xff1a;虚拟构造&#xff09;定义特点优点缺点应用场景代码实现 抽象工厂模式定义特点优点缺点应用场景代码实现工厂模式小结 定义 工厂模…

算法之背包问题

可分的背包问题是可以用贪心法来解决&#xff0c;而0-1背包问题通常使用动态规划方法来解决。 可分背包问题&#xff1a; 在可分背包问题中&#xff0c;物品可以被分割&#xff0c;您可以取走物品的一部分以适应背包的容量。这里的关键是物品的价值密度&#xff0c;即单…

最小产品价格差值

题目描述 给定某产品多少天的价格&#xff0c;记录于prices中&#xff0c;请找出任意两天之间的最小价格差&#xff08;即abs(prices[i] - prices[j])&#xff09;的最小值&#xff0c;i!j&#xff09;并计算最小介个差组合的个数 样例1 输入 [1,3,7,5,12] 输出 3 样例2…

VTK9.2.0+QT5.14.0绘制三维显示背景

背景 上一篇绘制点云的博文中&#xff0c;使用的vtkCameraOrientationWidget来绘制的坐标轴&#xff0c;最近又学习到两种新的坐标轴绘制形式。 vtkOrientationMarkerWidget vtkAxesActor 单独使用vtkAxesActor能够绘制出坐标轴&#xff0c;但是会随着鼠标操作旋转和平移时…

微服务中使用Maven BOM来管理你的版本依赖

摘要: 原创出处 sf.gg/a/1190000021198564 「飘渺Jam」欢迎转载&#xff0c;保留摘要&#xff0c;谢谢&#xff01; 为什么要使用BOM? 如何定义BOM? 项目使用方法? BOM&#xff08;Bill of Materials&#xff09;是由Maven提供的功能,它通过定义一整套相互兼容的jar包版…

通过 NIO + 多线程 提升硬件设备与系统的数据传输性能

一、项目展示 下图&#xff08;模拟的数据可视化大屏&#xff09;中数据是动态显示的 二、项目简介 描述&#xff1a;使用Client模拟了硬件设备&#xff0c;比如可燃气体浓度检测器。Client通过Socket与Server建立连接&#xff0c;Server保存数据到txt文件&#xff0c;并使用W…

结构体(位段)内存分配

结构体由多个数据类型的成员组成。那编译器分配的内存是不是所有成员的字节数总和呢&#xff1f; 首先&#xff0c;stu的内存大小并不为29个字节&#xff0c;即证明结构体内存不是所有成员的字节数和。   其次&#xff0c;stu成员中sex的内存位置不在21&#xff0c;即可推测…

Swift 请求用户授权以跟踪其跨应用或网站的活动

步骤1:导入框架 首先,需要在Swift文件中导入AppTrackingTransparency框架。 import AppTrackingTransparency import AdSupport步骤2:请求跟踪许可 在适当的地方请求用户的跟踪许可。通常,这个请求会在应用启动时或者在用户执行某些操作(例如,访问应用中的广告相关功能…

Linux服务器安装docker,基于Linux(openEuler、CentOS8)

本实验环境为openEuler系统(以server方式安装)&#xff08;CentOS8基本一致&#xff0c;可参考本文) 目录 知识点实验 知识点 Docker 是一个开源的应用容器引擎。它允许开发者将应用及其所有依赖项打包到一个可移植的容器中&#xff0c;并发布到任何支持Docker的流行Linux或Wi…

基于python flask的web服务

基本例子 from flask import Flask app Flask(__name__) app.route(/)#检查访问的网址&#xff0c;根路径走这里 def hello_world():return hello world#返回hello worldif __name__ __main__:# 绑定到指定的IP地址和端口app.run(host0.0.0.0, port1000, debugTrue)##绑定端…

设计一个完美的用户角色权限表

设计一个完美的用户角色权限表需要考虑系统的安全性、灵活性和可扩展性。以下是一个详细的用户角色权限管理表设计方案&#xff0c;包含多个表结构和字段描述。 目录 1. 用户表&#xff08;Users Table&#xff09;2. 角色表&#xff08;Roles Table&#xff09;3. 权限表&…

【数据结构与算法 | 基础篇】环形数组模拟队列

1. 前言 上文我们用环形单向链表实现了队列.接下来我们用环形数组来模拟队列.并实现了isFull()&#xff0c;isEmpty()等方法. 2. 环形数组模拟队列 (1). Queue接口 : public interface Queue<E> {//向队伍插入值, 插入成功返回true, 否则返回falseboolean offer(E v…

【Linux】TCP协议【上】{协议段属性:源端口号/目的端口号/序号/确认序号/窗口大小/紧急指针/标记位}

文章目录 1.引入2.协议段格式4位首部长度16位窗口大小32位序号思考三个问题【demo】标记位URG: 紧急指针是否有效提升某报文被处理优先级【0表示不设置1表示设置】ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带R…

windows 设置系统字体 (win11 win10)

由于微软的字体是有版权的&#xff0c;所以我打算替换掉 1.下载替换工具 github的项目&#xff0c;看起来很多人对微软默认字体带版权深恶痛绝。 项目地址&#xff1a;nomeiryoUi地址 这里选取最新的版本即可 2.打开软件 这里显示标题栏不能改&#xff0c;确认&#xff0c;其…

盖雅技能发展云,助力制造企业人效合一

制造行业尽管经历多次变革&#xff0c;但企业对人的管理始终是一项高度依赖经验和耗费人力的工作。随着供应链管理和生产设备的自动化、数字化升级&#xff0c;如何将第一生产要素——人&#xff0c;通过数字化的工具融入制造过程的闭环&#xff0c;对企业实现自动化工厂和智能…

力扣 滑动窗口题目总结

Leetcode3.无重复字符的最长子串 思路&#xff1a; 这道题主要用到思路是&#xff1a;滑动窗口 什么是滑动窗口&#xff1f; 其实就是一个队列,比如例题中的 abcabcbb&#xff0c;进入这个队列&#xff08;窗口&#xff09;为 abc 满足题目要求&#xff0c;当再进入 a&#x…

牛客NC334 字典序第K小【困难 10叉树 Java/Go/PHP/C++】,力扣 440. 字典序的第K小数字

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/670c2bda374241d7ae06ade60de33e8b https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/description/ 本答案核心 10叉树, 数学规律Java代码 import java.util.*;public class Solution {…

大模型的灵魂解读:Anthropic AI的Claude3 Sonnet可解释性研究

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提供了大模型领域最新技…