前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ bind函数适配器

C++ bind函数适配器

作者头像
学徒漠筱歌
发布于 2022-07-17 02:28:02
发布于 2022-07-17 02:28:02
33000
代码可运行
举报
文章被收录于专栏:ZMHZMH
运行总次数:0
代码可运行

    在我之前的博客让类成员函数指针成为可调用对象里有提到bind函数适配器,现在在这里介绍一下。

    适配器可以让某一个看上去像另一个行为,比如栈、队列等,底层使用链表去完成功能,我们通过操作底层链表去实现栈、队列等的行为。bind是函数适配器,通过bind返回的可调用对象去完成指定函数的功能。

    bind的头文件是<functional>,可使用命名空间std::placeholders的_n形式引用外部参数,属于C++11标准。

    使用例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// main.cpp
#include <functional>
#include <iostream>
using namespace std::placeholders;
using std::less;
using std::cout;
using std::endl;

int main()
{
    // less<int>是函数类模板,less<int>()返回一个临时值,可作为可调用对象,通过重载调用运算符调用
    auto f = bind(less<int>(),2,_1); // bind里2为可调用对象的第一个参数,_1为可调用对象的第二个参数,以此类推
    cout << f(3) << endl; // 此处3对应bind里的_1,等价于less<int>()(2,3),即2与3比较大小
    return 0;
}

    _1、_2、...、_29等为命名空间std::placeholders的成员(在头文件里从_1到_29,可使用29种参数,在平常的编程里已经足够了,可通过std::placeholders::_n使用),可以接收外部的实参作为指定可调用对象的某个参数,bind里第二个开始的参数顺序为可调用对象的参数顺序,_n形式为外部的实参,通过bind返回的可调用对象传入:

    如:auto fnt = bind(function,_2,2,"3",_2,_1);里(看上去有些复杂),等价于function(_2,2,"3",_2,_1);调用,而_1、_2需要bind返回的fnt接收,如果有fnt(x,y);则等价于function(y,2,"3",y,x);此时_1为x,_2为y。

    bind的使用环境,如传入可调用对象的参数过多时,可以通过bind指定一个或几个已知的参数,然后其他的参数在使用时指定,如果使用less<T>时,如果使用时需要动态传入一个参数,在使用前已知需要比较的是数字num,则使用auto fnt = bind(less<int>(),num,_1);,通过fnt接收外部的参数以完成功能。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++】STL 算法 ⑩ ( 函数适配器 | 函数适配器概念 | 函数适配器分类 | 函数适配器辅助函数 | std::bind2nd 函数原型及示例 | std::bind 函数原型及示例 )
在 STL 中 预定义了很多 函数对象 , 如果要 对 函数对象 的 参数 / 返回值 进行 计算 或 设置 , 可以 使用 " 函数适配器 " 实现上述需求 ;
韩曙亮
2024/01/12
2500
【C++】STL 算法 ⑩ ( 函数适配器 | 函数适配器概念 | 函数适配器分类 | 函数适配器辅助函数 | std::bind2nd 函数原型及示例 | std::bind 函数原型及示例 )
【C++】bind绑定包装器全解(代码演示,例题演示)
YY的秘密代码小屋
2024/01/23
7250
【C++】bind绑定包装器全解(代码演示,例题演示)
【C++11】C++11——包装器
function包装器也叫做适配器,C++11中的function本质是一个类模板,也是一个包装器。
平凡的人1
2023/10/15
3100
【C++11】C++11——包装器
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
在 <functional> 头文件 中 , 预定义了 modulus 函数对象 , 这是一个 二元函数对象 , 在该函数对象类中 , 重写了 函数调用操作符 函数 operator() , 该 预定义函数对象 代码如下 :
韩曙亮
2024/01/12
2030
【C++】STL 算法 ⑪ ( 函数适配器嵌套用法 | modulus 函数对象 - 取模运算 | std::count_if 函数原型 | std::not1 函数原型 )
【C++11】 函数适配:深入理解std::bind与占位符
🔄 std::bind 是C++11引入的函数适配工具,用于绑定函数参数或调整参数顺序,生成新的可调用对象。它位于头文件中,常用于:
IsLand1314
2025/03/17
1140
初识C++ · C++11(3)
本文介绍的是包装器以及线程库的简单了解,但是呢,线程是基于对Linux有一定的了解,所以本文就是简单介绍一下,介绍完包装器以及线程库的简单理解之后C++11的特性就到此为止,当然C++11远不止于此!
_lazy
2024/10/16
810
初识C++ · C++11(3)
C++11第四弹:包装器
C++中的可调用对象:函数指针(类型定义很复杂)、仿函数对象(定义一个类的时候,用的时候有些麻烦,其次不适合统一类型)、lambda(没有类型概念)、包装器
南桥
2024/09/16
1460
C++11第四弹:包装器
[C++11] 包装器 : function 与 bind 的原理及使用
std::function 是⼀个类模板,也是一个通用的、多态函数包装器,用于存储可调用对象。函数指针、仿函数、 lambda 等可调⽤对象的类型各不相同,<font style="color:rgb(31,35,41);">std::function</font>的优势就是统⼀类型,对他们都可以进⾏包装,这样在很多地⽅就⽅便声明可调⽤对象的类型。
DevKevin
2024/11/15
3020
[C++11] 包装器 : function 与 bind 的原理及使用
C++编程经验(11):std::function 和 bind绑定器
在前面C++集群的项目里面大量应用到了绑定器来做解耦操作,那么,绑定器到底是什么呢?有什么玄妙的地方嘞?
看、未来
2021/10/09
1.5K0
C++编程经验(11):std::function 和 bind绑定器
【C++11】 包装器 | bind
function包装器 也被叫做 适配器 C++11中function本质是类模板,也是一个包装器
lovevivi
2023/10/17
2960
【C++11】 包装器 | bind
【C++11特性篇】玩转C++11中的包装器(function&bind)
YY的秘密代码小屋
2024/01/23
6870
【C++11特性篇】玩转C++11中的包装器(function&bind)
C/C++开发基础——lambda表达式与std::bind闭包
lambda表达式是从C++11开始引入的,主要用来定义匿名函数和闭包。lambda表达式可以被当作一个值赋给另一个变量,也可以作为实参传递给其他函数,或者作为其他函数的返回结果,用法类似于前面提到的函数对象和函数指针。如果只是把单个函数拿来传参,lambda表达式的使用方式比函数指针和函数对象更简洁。
Coder-ZZ
2023/03/08
1.1K0
C/C++开发基础——lambda表达式与std::bind闭包
C++之std::function、std::bind、lambda特性
std::function 是 C++11 标准库中的一个模板类,它可以用于包装任何可调用对象(函数、函数指针、成员函数、lambda 表达式等),并提供一种统一的方式来管理和调用这些可调用对象。
Linux兵工厂
2024/04/15
9220
C++之std::function、std::bind、lambda特性
【C++11(下)】—— 我与C++的不解之缘(三十二)
随着 C++11 的引入,现代 C++ 语言在语法层面上变得更加灵活、简洁。其中最受欢迎的新特性之一就是 lambda 表达式(Lambda Expression),它让我们可以在函数内部直接定义匿名函数。配合 std::function 包装器 使用,可以大大提高代码的表达力与可维护性。
星辰与你
2025/04/07
1170
【C++11(下)】—— 我与C++的不解之缘(三十二)
【C++】:bind绑定器和function函数对象机制
在C++中工程实践中,bind绑定器和function函数对象非常常用,而且bind+function简直就是无敌的存在。本篇博客中,我们力求用最小的成本搞懂它们,让你用起来得心应手
破晓的历程
2024/10/09
2120
从零开始学C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例
根据给定的文章内容,撰写摘要总结。
s1mba
2017/12/28
1K0
C++11-lambda表达式/包装器/线程库
捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用
用户9645905
2022/11/30
1.2K0
C++11-lambda表达式/包装器/线程库
function和bind
仿函数的定义:仿函数(functor),它的行为类似于函数的东西(something that performs a function)
无敌清风蓝
2024/06/04
1520
【C++航海王:追寻罗杰的编程之路】C++11(四)
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。
枫叶丹
2024/06/04
1600
【C++航海王:追寻罗杰的编程之路】C++11(四)
参数绑定---bind函数
为了用check_size来代替lambda,如何解决一元谓词接受一个参数的问题呢?
大忽悠爱学习
2021/11/15
1.3K0
推荐阅读
相关推荐
【C++】STL 算法 ⑩ ( 函数适配器 | 函数适配器概念 | 函数适配器分类 | 函数适配器辅助函数 | std::bind2nd 函数原型及示例 | std::bind 函数原型及示例 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验