【C++】bind绑定包装器全解(代码演示,例题演示)

前言

大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏

目录

  • 一.bind(绑定包装器)
    • 【1】基本概念
    • 【2】bind实现参数顺序调整的规则示意图
    • 【3】bind的一个基本应用场景:不同利率计算(引入变量rate)
    • 【4】placeholders::_1, placeholders::_2无视bind函数包装器的常量位置:按顺序1,2,3...
    • 【5】bind绑定成员函数(静态/非静态)

一.bind(绑定包装器)

【1】基本概念

  • std::bind函数定义在头文件中,是一个 函数模板 ,它就像一个函数包装器(适配器),接受一个可调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表
  • 一般主要应用于:实现参数顺序调整等操作

【2】bind实现参数顺序调整的规则示意图

  • 如图中所示:
  • 同样的rSub(10,5)通过变换bind 函数包装器 placeholders::_1, placeholders::_2,可以实现10-5&5-10
    在这里插入图片描述

【3】bind的一个基本应用场景:不同利率计算(引入变量rate)

double Plus(int a, int b, double rate)
{return (a + b) * rate;
}int main()
{function<double(int, int)> Plus1 = bind(Plus, placeholders::_1, placeholders::_2, 4.0);function<double(int, int)> Plus2 = bind(Plus, placeholders::_1, placeholders::_2, 4.2);function<double(int, int)> Plus3 = bind(Plus, placeholders::_1, placeholders::_2, 4.4);cout << Plus1(5, 3) << endl;cout << Plus2(5, 3) << endl;cout << Plus3(5, 3) << endl;return 0;
}

【4】placeholders::_1, placeholders::_2无视bind函数包装器的常量位置:按顺序1,2,3…

  • 如下图所示:
  • 即使rate参数放在bind包装器的中间,依然按照placeholders::_1,_2,_3…的顺序走
double Plus(int a, double rate,int b)
{return (a + b) * rate;
}int main()
{function<double(int, int)> Plus1 = bind(Plus, placeholders::_1,  4.0 placeholders::_2);function<double(int, int)> Plus2 = bind(Plus, placeholders::_1, 4.2,placeholders::_2);function<double(int, int)> Plus3 = bind(Plus, placeholders::_1,4.4 ,placeholders::_2);cout << Plus1(5, 3) << endl;cout << Plus2(5, 3) << endl;cout << Plus3(5, 3) << endl;return 0;
}

【5】bind绑定成员函数(静态/非静态)

主要方法分为下面三种:

  1. 对于静态成员函数,直接取类的地址即可&SubType::sub
  2. 对于非静态成员函数,在直接取类的地址的基础上&SubType::sub,法一:先实例化出一个类SubType st;,取其地址&st
  3. 在直接取类的地址的基础上&SubType::sub,法二:直接传入一个匿名对象SubType()
class SubType
{
public:static int sub(int a, int b){return a - b;}int ssub(int a, int b, int rate){return (a - b) * rate;}
};int main()
{
//对于静态成员函数function<double(int, int)> Sub1 = bind(&SubType::sub, placeholders::_1, placeholders::_2);cout << Sub1(1, 2) << endl;
//对于非静态成员函数,法一SubType st;function<double(int, int)> Sub2 = bind(&SubType::ssub, &st, placeholders::_1, placeholders::_2, 3);cout << Sub2(1, 2) << endl;
//对于非静态成员函数,法二function<double(int, int)> Sub3 = bind(&SubType::ssub, SubType(), placeholders::_1, placeholders::_2, 3);cout << Sub3(1, 2) << endl;return 0;
}

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

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

相关文章

即将来临的2024年,汽车战场再起波澜?

我们来简要概况一下11月主流车企的销量表现&#xff1a; 根据数据显示&#xff0c;11月吉利集团总销量29.32万辆&#xff0c;同比增长28%。这在当月国内主流车企中综合实力凌厉&#xff0c;可谓表现得体。而与吉利直接竞争的比亚迪&#xff0c;尽管数据未公布&#xff0c;但我们…

邦火策划的餐饮品牌策划,到底是不是打破常规的创新之选?

在餐饮业的浩瀚市场中&#xff0c;邦火策划以其独特的餐饮品牌策划服务&#xff0c;引起了业界的关注。邦火策划是否真的是打破常规的创新之选&#xff1f;让我们深入了解&#xff0c;探寻其中的奥秘。 首先&#xff0c;邦火策划在餐饮品牌策划中的创新之处在于对市场的深度洞…

如何查看内存卡使用记录-查看的设备有:U盘、移动硬盘、MP3、SD卡等-供大家学习研究参考

主要功能 USB Viewer&#xff08;USB移动存储设备使用记录查看器&#xff09;可用于查看本机的USB移动存储设备使用记录。可查看的设备有&#xff1a;U盘、移动硬盘、MP3、SD卡……等。   可用于兵器、航空、航天、政府、军队等对保密要求较高的单位&#xff0c;可在计算机保…

【操作系统】学习操作系统知识

文章目录 前言测量系统调用和上下文切换的成本purify 和 valgrindxx3 的执行过程 前言 ref&#xff1a;http://ges.cs.wisc.edu/~remzi/OSTEP/Chinese 零散的记录知识&#xff0c;看《操作系统引论》 测量系统调用和上下文切换的成本 上下文切换需要多长时间&#xff1f;甚…

C++面向对象(OOP)编程-STL详解(vector)

本文主要介绍STL六大组件&#xff0c;并主要介绍一些容器的使用。 目录 1 泛型编程 2 CSTL 3 STL 六大组件 4 容器 4.1 顺序性容器 4.1.1 顺序性容器的使用场景 4.2 关联式容器 4.2.1 关联式容器的使用场景 4.3 容器适配器 4.3.1 容器适配器的使用场景 5 具体容器的…

建筑模板的规格是多大的呢?

建筑模板的规格有多种&#xff0c;它们的尺寸可以根据不同的建筑需求和标准而有所不同。常见的建筑模板规格包括但不限于以下几种&#xff1a; 1. 木模板&#xff1a; - 常见的木模板尺寸包括915mm x 1830mm&#xff08;3英尺 x 6英尺&#xff09;和1220mm x 2440mm&#xff08…

linux设置线程优先级以及调度策略浅析

linux线程调度策略 Linux内核会根据线程的优先级和调度策略来分配处理器时间。线程的优先级越高&#xff0c;它在竞争处理器时间时就越有可能被选中执行。调度策略定义了内核在选择下一个要执行的线程时所遵循的规则。 在Linux中&#xff0c;有以下几种常见的调度策略&#x…

屏幕颜色吸取器

前言 屏幕颜色吸取器。 前端工程师的福音&#xff0c;获取全屏幕上所有位置的颜色。 运行在window上的软件 屏幕颜色吸取器 前言1 下载解压2 使用 1 下载解压 下载地址&#xff1a;https://download.csdn.net/download/qq_44850489/11943229 下载下来之后解压 如下图&#…

数据流图_DFD图_精简易上手

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输人移动到输出的过程中所经受的变换。 首先给出一个数据流图样例 基本的四种图形 直角矩形:代表源点或终点,一般来说,是人,如例图的仓库管理员和采购员圆形(也可以画成圆角矩形):是处理,一般来说,是动作,是动词名词的形式…

Java开发框架和中间件面试题(4)

27.如何自定义Spring Boot Starter&#xff1f; 1.实现功能 2.添加Properties 3.添加AutoConfiguration 4.添加spring.factory 在META INF下创建spring.factory文件 6.install 28.为什么需要spring boot maven plugin? spring boot maven plugin 提供了一些像jar一样打包…

生物信息学R分析工具包ggkegg的详细使用方法

ggkegg介绍 ggkegg 是一个用于生物信息学研究的工具&#xff0c;可以用于分析和解释基因组学数据&#xff0c;并将其与已知的KEGG数据库进行比较。ggkegg 是从 KEGG 获取信息并使用 ggplot2 和 ggraph 进行解析、分析和可视化的工具包&#xff0c;结合其他使用 KEGG 进行生物功…

【常见的语法糖(详解)】

&#x1f7e9; 说几个常见的语法糖 &#x1f7e2;关于语法糖的典型解析&#x1f7e2;如何解语法糖&#xff1f;&#x1f7e2;糖块一、switch 支持 String 与枚举&#x1f4d9;糖块二、泛型&#x1f4dd;糖块三、自动装箱与拆箱&#x1f341;糖块四、方法变长参数&#x1f5a5;️…