C++11std::bind的简单使用

std::bind用来将可调用对象与其参数一起进行绑定,绑定后的结果可以用std::function(可调用对象包装器)进行保存,并延迟调用到任何我们需要的时候。

通俗来讲,它主要有两大作用:

(1)将可调用对象与其参数绑定成一个仿函数。

(2)将多元(参数个数为n,n>1)可调用对象转换成一元或者(n-1)元可调用对象,即只绑定部分参数。

注:std::placeholders为一个占位符,代表这个位置在函数调用时,将被第几个参数所替代。

void call_when_even(int x, const std::function<void(int)>& f)
{if (x % 2 == 0){f(x);}
}
void output(int x)
{cout << x << endl;
}
void output_add_2(int x)
{cout << x + 2 << endl;
}
//placeholders为占位符的意思,用于函数绑定的时候,缺省函数的占位符
int main()
{{auto fr = std::bind(output, std::placeholders::_1);for (int i = 1; i <= 10; ++i){call_when_even(i, fr);}}{auto fr1 = std::bind(output_add_2, std::placeholders::_1);for (int i = 1; i <= 10; ++i){call_when_even(i, fr1);}}return 0;
}
void output(int x, int y)
{cout << x << " " << y << endl;
}
int main(void)
{std::bind(output, 1, 2)();//输出1 2std::bind(output, std::placeholders::_1, 2)(1);//输出1 2std::bind(output, 2, std::placeholders::_1)(1);//输出2 1//std::bind(output, 1, std::placeholders::_2)(1);	error,调用时没有第二个参数,缺少第二个参数std::bind(output, 2, std::placeholders::_2)(1, 2);//输出2 2,调用时第一个参数直接被吞并了std::bind(output, std::placeholders::_1, std::placeholders::_2)(10, 20);//10 20std::bind(output, std::placeholders::_2, std::placeholders::_1)(30, 40);//40 30return 0;
}
class Test
{
public:int value = 0;void output(int x, int y){cout << x << " " << y << endl;}
};
int main()
{Test test;/*std::function<void(int, int)> fr = std::bind(&Test::output,std::placeholders::_1, std::placeholders::_2);fr(1, 2);*/std::function<int& (void)> fr_i = std::bind(&Test::value, &test);fr_i() = 123;cout << test.value << endl;return 0;
}
struct Test
{
public:static const int Add(const int& x, const int& y){return x + y;}
};
int main()
{std::function<const int(const int&, const int&)> fr = std::bind(Test::Add, std::placeholders::_1, std::placeholders::_2);cout << fr(11, 44) << endl;return 0;
}struct Test
{
public:template<class T>const T Add(const T& x, const T& y){return x + y;}
};
int main()
{Test test;std::function<const int(const int&, const int&)> fr = std::bind(Test::Add<int>,test,std::placeholders::_1,std::placeholders::_2);cout << fr(10,20) << endl;return 0;
}

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

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

相关文章

每日一题Cat, Fox and the Lonely Array

文章目录 题名&#xff1a;题意&#xff1a;题解&#xff1a;代码&#xff1a; 题名&#xff1a; Cat, Fox and the Lonely Array 题意&#xff1a; 给定一个数组a&#xff0c;求出最小的k&#xff0c;满足数组每个长度为k的连续子数组元素按位或答案都相等。 题解&#xf…

【AI新时代】拥抱未来,用AI无人直播替代真人直播,解放劳动力,控制成本!

在科技日新月异的新时代&#xff0c;人工智能&#xff08;AI&#xff09;的 keJ0277 浪潮正在席卷各行各业&#xff0c;为传统的工作模式带来了前所未有的变革。其中&#xff0c;AI无人直播的兴起&#xff0c;无疑是这场科技革命中的一股强劲力量。它以其独特的优势&#xff0…

【Linux设备驱动】1.字符设备驱动程序框架及相关结构体

目录 程序总体框架模块加载函数模块卸载函数具体操作函数 相关结构体cdev结构体file_oparations结构体 设备号分配设备号注销设备号创建设备文件 程序总体框架 /* 包含相关头文件 */ #include <linux/module.h> #include <linux/fs.h> #include <linux/init.h&…

C# System.Span<T>、ref struct

1. Span<T>的特性 system.span<T>在.net core 2.0版本引入它适用于对连续内存的操作&#xff0c;而不产生新的内存分配&#xff0c;比如数组、字符串、堆外内存类型为ref struct&#xff0c;不能作为参数传递&#xff0c;不能被装箱(不能作为类的字段)&#xff0c…

信号处理技术:现代通信技术的基石

随着信息技术的飞速发展&#xff0c;通信技术的每一次革新都极大地改变了人们的生活方式。而在这背后&#xff0c;信号处理技术作为通信技术的核心&#xff0c;通过深入分析信号特性、提取有用信息、转换信号形式等一系列手段&#xff0c;为现代通信技术的发展提供了强有力的支…

机器学习7大方面,30个硬核数据集。纯干货分享

在刚刚开始学习算法的时候&#xff0c;大家有没有过这种感觉&#xff0c;最最重要的那必须是算法本身&#xff01; 其实在一定程度上忽略了数据的重要性。 而事实上一定是&#xff0c;质量高的数据集可能是最重要的&#xff01; 数据集在机器学习算法项目中具有非常关键的重…

Python读写文件

最近得以空闲&#xff0c;然后继续学习py。 学习一下py中最频繁用到的文件读写的方法。 在py中&#xff0c;操作是通过文件对象【File obj】实现的&#xff0c;通过文件对象可以读写文本文件和一些二进制文件。 1.打开文件 使用Python中的open函数。有8个参数&#xff0c;但…

2024.5.25.python.exercise

# # 导入数据处理的包 # # from pyecharts.charts import Line # # from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts, LabelOpts # # import json # # # # # 打开文件 # # file_us open("美国.txt", "r", encoding&quo…

C++ Primer Plus第十八章复习题

1、使用用大括号括起的初始化列表语法重写下述代码。重写后的代码不应使用数组ar。 class z200 { private:int j;char ch;double z; public:Z200(int jv,char chv&#xff0c;zv) : j(jv), ch (chv), z(zv){} };double x 8.8; std::string s "what a bracing effect ! …

头歌OpenGauss数据库-H.存储过程第1关:创建存储过程

编程要求 数据库中已经存在三个基础表&#xff1a; student ( num integer, name char(20), age integer, level integer, dept char(20) ); course ( id integer, name char(20) ); sel_course ( studentid integer, courseid integer, score integer ); 创建存储过程&#xf…

Vue3/Vite引入EasyPlayer.js播放H265视频错误的问题

一、引入EasyPlayer.js github链接:GitHub - EasyDarwin/EasyPlayer.js: EasyPlayer.js H5播放器 将demo/html目录下的 EasyPlayer-element.min.js、EasyPlayer-lib.min.js、EasyPlayer.wasm、jquery.min.js 复制到vue3工程的public目录下,注意,vue3 vite的index.html文件…

win10配置wsl的深度学习环境

# 1、一步完成wsl&#xff1a;开启虚拟机、linux子系统、并下载ubuntu # 官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install wsl --install# 2、打开windows terminal&#xff0c;选ubuntu交互环境 # 第一次需要配置用户名和密码 # 接下来正常使用即可# 3、cud…

自然资源-做好用地用海国土空间规划符合性审查

自然资源-做好用地用海国土空间规划符合性审查 为发挥国土空间规划战略引领和刚性管控作用&#xff0c;强化国土空间规划对各专项规划的指导约束作用&#xff0c;依法依规加强自然资源要素保障&#xff0c;做好用地用海用岛国土空间规划符合性审查工作&#xff1a; 一、加快地…

深入了解数据库设计中的规范化与反规范化

目录 零、前言 一、一些基本术语 二、关系模式 2.1. 什么是关系模式 2.2. 示例 三、数据依赖 3.1. 函数依赖 3.1.1. 完全函数依赖 3.1.2. 部分函数依赖 3.1.3. 传递函数依赖 3.2. 多值依赖 3.3. 连接依赖 四、规范化 4.1. 第一范式&#xff08;1NF&#xff09; …

什么是 DNS 转发?

DNS转发是一种网络传输技术&#xff0c;主要用于解决本地DNS服务器无法直接解析某个特定域名的情况。当本地DNS服务器收到一个无法解析的域名请求时&#xff0c;它会将该请求转发给其他可信的DNS服务器&#xff0c;以获取所需的解析结果。这种技术有助于优化网络性能和安全性&a…

【Flutter】有状态组件StatefulWidgetScaffold组件属性

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月26日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

AWS联网和内容分发之VPC

Amazon Virtual Private Cloud&#xff08;VPC&#xff09;是一项用于在AWS云中创建一个逻辑隔离的虚拟网络的服务&#xff0c;使用户能够在云中启动AWS资源&#xff08;例如EC2实例&#xff09;&#xff0c;并将其放置在自己定义的虚拟网络中。 Amazon VPC让您能够全面地控制…

AEE运行机制深入剖析——阅读笔记

AEE运行机制深入剖析——阅读笔记 在移动设备和嵌入式系统的开发中&#xff0c;应用执行环境&#xff08;Application Execution Environment&#xff0c;简称AEE&#xff09;起着至关重要的作用。AEE是操作系统层面的一个框架&#xff0c;负责管理应用程序的生命周期&#xf…

JVM性能调优:内存模型及垃圾收集算法

JVM内存结构 根据Java虚拟机规范&#xff0c;JVM内存主要划分为以下区域&#xff1a; 年轻代&#xff08;New Generation&#xff09; 包括Eden空间&#xff0c;用于存放新创建的对象。Survivor区由两个相同大小的Survivor1和Survivor2组成&#xff0c;用于存放经过初次垃圾回…

AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇)

上一篇介绍了Agent与LangGraph的基础技能Tool的必知必会 AI菜鸟向前飞 — LangChain系列之十三 - 关于Tool的必知必会 前面已经详细介绍了Promp、RAG&#xff0c;终于来到Agent系列&#xff08;别急后面还有LangGraph&#xff09;&#xff0c;大家可以先看下这张图&#xff1…