大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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;
}
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++ 第五版
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219175.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...