c++ 11 bind_箭头函数可以用bind吗

c++ 11 bind_箭头函数可以用bind吗bind函数的使用详解可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。调用bind的一般形式:autonewCallable=bind(callable,arg_list);`其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。即,当我们调用n……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

bind函数的使用详解

可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。
调用bind的一般形式:auto newCallable = bind(callable,arg_list);`

其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。即,当我们调用newCallable时,newCallable会调用callable,并传给它arg_list中的参数。

arg_list中的参数可能包含形如_n的名字,其中n是一个整数,这些参数是“占位符”,表示newCallable的参数,它们占据了传递给newCallable的参数的“位置”。数值n表示生成的可调用对象中参数的位置:_1为newCallable的第一个参数,_2为第二个参数,以此类推。

1. 绑定普通函数

#include<iostream>
#include<functional>
using namespace std;

int plus(int a,int b)
{
   return a+b;
}
int main()
{
  //表示绑定函数plus 参数分别由调用 func1 的第一,二个参数指定
   function<int(int,int)> func1 = std::bind(plus, placeholders::_1, placeholders::_2);
   
  //func2的类型为 function<void(int, int, int)> 与func1类型一样
   auto  func2 = std::bind(plus,1,2);   //表示绑定函数 plus 的第一,二为: 1, 2 
   cout<<func1(1,2)<<endl; //3
   cout<<func2()<<endl; //3
   retunrn 0;
}

Jetbrains全家桶1年46,售后保障稳定

2. 绑定类的成员函数

#include<iostream>
#include<functional>
using namespace std;
class Plus
{
   public:
   	int plus(int a,int b)
   	{
   	    return a+b;
   	}
}
int main()
{
   Plus p;
   // 指针形式调用成员函数
   function<int(int,int)> func1 = std::bind(&Plus::plus,&p, placeholders::_1, placeholders::_2);
  // 对象形式调用成员函数
   function<int<int,int>> func2 = std::bind(&Plus::plus,p, placeholders::_1, placeholders::_2);
   cout<<func1(1,2)<<endl; //3
   cout<<func2(1,2)<<endl; //3
   retunrn 0;
}

占位符_1位于placeholders的命名空间,而placeholders位于std的命名空间中

3. 绑定类静态成员函数

#include<iostream>
#include<functional>
using namespace std;
class Plus
{
	public:
		static int plus(int a,int b)
		{
		    return a+b;
		}
}
int main()
{
   function<int(int,int)> func1 = std::bind(&Plus::plus, placeholders::_1, placeholders::_2);
   cout<<func1(1,2)<<endl; //3
   retunrn 0;
}

参考:primer C++ 第五版

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219175.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月8日 下午2:15
下一篇 2025年7月8日 下午2:43


相关推荐

  • pycharm设置代理_mac pycharm怎么设置环境

    pycharm设置代理_mac pycharm怎么设置环境一、Shadowsocket用默认端口即可不需要改二、mac网络三、Pycharm配置代理检测成功四、然而执行代码还是没走代理最后方式直接request加代理#!/usr/bin/evnpython#-*-coding:utf-8-*-importrequestsproxy={“http”…

    2022年8月26日
    7
  • CSDN各产品线月度NPS分析报告新鲜出炉【2021年7月】[通俗易懂]

    CSDN各产品线月度NPS分析报告新鲜出炉【2021年7月】[通俗易懂]不知道各位用户大大有没有注意到,最近,咱们CSDN网站很多页面增加了这个功能模块:你愿意向朋友推荐xxx吗?哈哈,聪明的小伙伴们可能已经知道了,它其实就是个简单的满意度调查,学名NPS。那到底什么是NPS呢?且听C菌我慢慢道来。一、什么是NPS?NPS是针对企业良性收益与真实增长所提出的用户忠诚度概念,它是目前最流行的顾客忠诚度分析指标。根据用户的推荐意愿,将用户分为三类:推荐者、被动者、贬损者,推荐者与贬损者是对企业实际的产品口碑有影响的用户,这两部分用户在用户总数中所占百分比之差,就是.

    2022年5月5日
    56
  • Python.json.常见两个错误处理(Expecting , delimiter)(Invalid control character at)

    Python.json.常见两个错误处理(Expecting , delimiter)(Invalid control character at)ValueError Invalidcontr line1column1 char123 出现错误的原因是字符串中包含了回车符 r 或者换行符 n 解决方案 转义 json data json data replace r r replace n n 使用关键字 strict

    2026年3月18日
    2
  • maven学习系列——(一)maven简介[通俗易懂]

    这个系列学习maven,主要是看maven实战和其他网站上整理出自己一些知识点,方便自己以后查找和使用! 这个系列的我先根据自己在公司经常使用到的一些知识点进行整理,后期在做完善! 计划:要在2017 年之前学习和整理完成!

    2022年2月25日
    47
  • 10个精致的企业网站设计模板欣赏及点评

    10个精致的企业网站设计模板欣赏及点评以下的 10 个网页设计作品是 ThemeForest 上最受欢迎的优秀企业网站设计模板的其中一小部分 它们风格低调沉稳 几乎只使用黑白灰三种色彩 却不雷同 并且在细节上都非常讲究 ThemeForest 是非常值得网页设计师关注的高品质网站 其上的几乎每一个设计模板都称得上是杰出的设计作品 值得我们认真揣摩学习 这篇文章里我将根据自己的观点对这 10 个设计模板的设计思路和方法做一总结 列出其中的要点 挖掘值

    2026年3月26日
    2
  • EJB定时器

    EJB定时器EJB 的定时器使用 EJB 定时需要在一个 EJB 可以是单例或无状态 EJB 内 写一个 public 方法 返回值为 void 参数为空 加上 javax ejb Schedule 注解就行了 EJB 定时器 我们常用的就是三个属性 时分秒 这三个值默认值都是 0 年月日默认值是 的意思是每次都执行 0 的意思是值为 0 时才执行 如果说我们在注解中什么都不加 那么这个方法会在每天凌晨 0 点 0 分 0 秒时

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号