占位符_1,_2,_3,_4_5...,_9
bind括号里面出现的占位符由后面的补充,比如
bind(g, 11, _2, _1)(6,7);
第一个参数6补充_1, 第二个参数7补充_2,所以相当于g(11,7,6)
function是函数对象的‘容器’,可以和bind配合使用,存储bind表达式的结果
bind括号里面出现的占位符由后面的补充,比如
bind(g, 11, _2, _1)(6,7);
第一个参数6补充_1, 第二个参数7补充_2,所以相当于g(11,7,6)
function是函数对象的‘容器’,可以和bind配合使用,存储bind表达式的结果
#include <stdio.h>
#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
using namespace boost;
void g(int a, int b, int c)
{
printf("=g(%d,%d,%d)\n",a,b,c);
}
int main()
{
bind(g, 10, 20, 30)();//=g(10,20,30);
bind(g, _1, 20, 30)(6);//=g(6,20,30);
bind(g, 10, 20, _1)(6);//=g(10,20,6);
bind(g, 10, _2, _1)(6,7);//=g(10,7,6);
bind(g, _1, _2, _3)(6,7,8);//=g(6,7,8);
bind(g, _3, _1, _2)(6,7,8);//=g(8,6,7);
bind(g, _4, _4, _4)(6,7,8,9);//=g(9,9,9);
function<void (int , int )> sum = bind(g, _2, _2, _1);
sum(10, 20);//=g(20,20,10);
function<void (int, int, int)> sum0 = bind(g, _2, _2, _1);
sum0(10,20,30);//=g(20,20,10);
function<void (int, int, int)> sum2 = bind(g, _2, _3, _1);
sum2(10,20,30);//=g(20,30,10);
return 0 ;
};
=g(10,20,30)
=g(6,20,30)
=g(10,20,6)
=g(10,7,6)
=g(6,7,8)
=g(8,6,7)
=g(9,9,9)
=g(20,20,10)
=g(20,20,10)
=g(20,30,10)