02 std::bind
std::bind
bind函数看作是一个通用的函数适配器。
它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。
void fun(int x, int y, int z)
{
cout<< x <<" "<< y <<" "<< z <<endl;
}
01 绑定参数
auto f1 = std::bind(fun,1,2,3);
f1();//print:1 2 3
02 绑定参数的第三个参数为3, 第一、第二个参数由调用者指定
auto f2 = std::bind(fun, placeholders::_1, placeholders::_2, 3);
f1(1, 2);//print:1 2 3
03 绑定参数的第三个参数为3, 第一、第二个参数由调用者的第二、第一个参数指定。
auto f3 = std::bind(fun, placeholders::_2, placeholders::_1, 3);
f3(1,2);//print:2 1 3
04 绑定参数一个参数为n , 第二个参数由调用者指定
int n = 2;
int m = 3;
auto f4 = std::bind(fun, 1, n, placeholders::_1);
f4(m); //print:1 2 3
05 绑定类的成员函数
A a;
auto f5 = std::bind(&A::fun, a, placeholders::_1, placeholders::_2);
std::function<void(int,int)> f6 = std::bind(&A::fun,a,std::placeholders::_1,std::placeholders::_2);
f5(10,20);//==>调用a.fun(10,20)==>print:10 20
06 示例
#include <iostream>
#include <functional>
#include <thread>
#include <chrono>
#include <vector>
#include <algorithm>
void print_sum(int x, int y) {
std::cout << x + y << "\n";
}
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
auto bound_sum = std::bind(print_sum, std::placeholders::_1, 5); // 绑定第二个参数为 5。
std::for_each(nums.begin(), nums.end(), bound_sum); // 对于每个元素,输出它与 5 的和。
return 0;
}