标签:blog int 功能 namespace 临时对象 div 指针 函数指针 ++
1.bind()
函数对象:可以以函数方式与()结合使用的任意对象,包括 function 仿函数、函数名、函数指针、含有()操作符的类对象。
function是一组函数对象包装类的模版,(又叫防函数)实现一个泛型的回调机制,function< int( int, int)>形式,可调用的对象普通函数、函数指针、lanmbda表达式、函数对象和类的成员函数等。
int add(int i, int j){ return a + b;} auto mod = [](int a, int b){ return a%b;} struct divide{ int operator()(int i, int j){ return i/j; } }; function<int(int, int)> func1 = add; function<int(int, int)> func2 = mod; function<int(int, int)> func3 = divide; func1(1, 2); int a = func2(1, 2); func3(1, 2);
//bind template <class Fn, class... Args> /* unspecified */ bind (Fn&& fn, Args&&... args);
bind返回一个和Fn功能相同,但参数是Args(已经填好了,调用时不用传参了)和占位符的函数对象,如果Fn是成员函数,则返回值第一个参数this指针。
struct integer{ int i; integer(int i):i(i){} void incr_by(int j) {i += j;} }; integer x(0); integer* y = &x; using namespace std::placeholders; auto f0 = bind(&integer::incr_by, _1, _2); f0(x, 2); //x.incr_by(2); x.i = 2; f0(y,2);//y->incr_by(2); x.i = 4; auto f1 = bind(&integer::incr_by, x, _1); f1(2); //这里x是值传递,调用的是一个临时对象的incr_by函数,x的i不改变。 auto f2 = bind(&integer::incr_by, ref(x), _1); f2(2);//引用,x改变了,x.i = 6; auto f3 = bind(&integer::incr_by, &x, _1); f2(2);//指针,x改变了,x.i = 8;
标签:blog int 功能 namespace 临时对象 div 指针 函数指针 ++
原文地址:http://www.cnblogs.com/wukuaiqian/p/7746594.html