码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 11

时间:2017-10-28 14:41:05      阅读:218      评论:0      收藏:0      [点我收藏+]

标签: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;

 

C++ 11

标签:blog   int   功能   namespace   临时对象   div   指针   函数指针   ++   

原文地址:http://www.cnblogs.com/wukuaiqian/p/7746594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!