std::bind 是一个函数模板, 它就像一个函数适配器,可以把一个原本接收N个参数的函数fn,
通过绑定一些参数,返回一个接收M个参数的函数ret,同时还可以实现参数顺序调整等操作。
小例子如下:
#include <iostream>
#include <functional>
void func(int a, int b, int c) {
std::cout << "a=" << a << std::endl;
std::cout << "b=" << b << std::endl;
std::cout << "c=" << c << std::endl;
std::cout << std::endl;
}
int main() {
//正常函数调用
func(1,2,3);
//使用bind绑定func,并且给默认值4,5,6
//使用方法func(int a,int b,int c) == func()
//绑定到auto f 此时函数f将可以不用形参调用,达到缺省参数效果
auto f = std::bind(func,4,5,6);
f();
//使用 placeholders::_1 占位符可以改变函数的形参顺序,还可以改变函数的形参数量
//使用方法func(int x,int y,int z) == func(int)
//注意:缺省位置参数必须要填写
auto f1 = std::bind(func, std::placeholders::_1, 5, 6);
f1(100);
auto f2 = std::bind(func, 4, std::placeholders::_2, 6);
f2(0, 100);
auto f3 = std::bind(func, 4, 5, std::placeholders::_3);
f3(0, 0, 100);
//使用 function类也可以保存 bind绑定的函数,
//但是要注意参数数量和 bind绑定的参数数量
std::function<void()> p = std::bind(func, 7, 8, 9);
p();
std::function<void(int, int)> p1 = std::bind(func, 7, std::placeholders::_2, 9);
p1(0, 100);
//使用 bind函数改变函数的参数顺序
auto f4 = std::bind(func, std::placeholders::_3, std::placeholders::_2, std::placeholders::_1);
f4(1, 2, 3);
std::cin.get();
return 0;
}