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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • weblogic环境,应用上传图片报Could not initialize class sun.awt.X11.XToolkit

    weblogic环境,应用上传图片报Could not initialize class sun.awt.X11.XToolkit

    2022年1月21日
    40
  • P2P技术原理及应用[通俗易懂]

    P2P技术原理及应用[通俗易懂] P2P技术原理及应用    作者:金海廖小飞 摘要:对等网络(P2P)有3种主要的组织结构:分布式哈希表(DHT)结构、树形结构、网状结构。P2P技术已经延伸到几乎所有的网络应用领域,如分布式科学计算、文件共享、流媒体直播与点播、语音通信及在线游戏支撑平台等方面。现在人们已经开始将重心转入到覆盖层网络的节点延时聚集研究、覆盖网之间(Inter-Overlay)优化研究、P2P支撑平…

    2022年6月22日
    30
  • Typora下载和简单使用教程

    Typora下载和简单使用教程Typora下载Typora官网下载地址根据自己的电脑选择不同的版本,我用的是Windows64位的系统的就选择DownloadBeta(×64)下载完Typora以后我们就可以使用markdown了。Typora的学习1.标题数量 标题级数 快捷键 一个#加空格加内容 一级标题 Ctrl+1 两个#加空格加内容 二级标题 Ctrl+2 三个#加空格加内容 三级标题 Ctrl+3 以此类..

    2022年5月19日
    49
  • qnap系统安装_snailsvn安装配置教程

    qnap系统安装_snailsvn安装配置教程QNAP安装subversion服务器背景安装1.安装Entware2.安装Subversion配置1.创建仓库2.配置仓库启动svn1.杀掉已有的svn进程2.启动)背景买了一台QNAPTS-453Bmini。是x86的机器,性能强大,最高能装16G内存。某日偶然网上发现有人做svn服务器,于是打算试试。为啥不用Gitlab呢。因为发现Container的网络ip…

    2022年10月17日
    3
  • Mysql 多表联合查询效率分析及优化

    Mysql 多表联合查询效率分析及优化1.多表连接类型1.笛卡尔积(交叉连接)在MySQL中可以为CROSSJOIN或者省略CROSS即JOIN,或者使用’,’如:SELECT*FROMtable1CROSSJOINtable2SELECT*FROMtable1JOINtable2SELECT*FROMtable1,table2由于其返回的结果为被连接的两…

    2022年4月28日
    35
  • verilog cpu流水线_五级流水线CPU

    verilog cpu流水线_五级流水线CPU快把这一篇给更了

    2022年8月20日
    7

发表回复

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

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