c++11---包装器

function包装器

function包装器也叫作适配器。C++中的function本质是一个类模板。function可以包装所有可调用对象(仿函数,lambda表达式,函数指针)。

---------------------------------------------------------------------------------------------------------------------------------

格式如下:

function<x1(x2)>,x1处是要包装的对象的返回值类型,x2处写出要包装的对象的参数类型。如下:

这里要注意三点:

1.非静态成员函数的函数名不是函数地址,需要要加取地址符号才能得到函数地址。

2.普通成员函数具有隐藏的this指针这一参数,包装的时候要写上。

3.既然this是指针类型,为什么第二种包装方法把参数写成对象也可以,这是因为包装器底层其实是把可调用对象作为成员变量存起来,使用包装器时先调用包装器的operator()重载,把参数传给operator(),然后operator()利用参数调用这个对象,所以实际上,这里是operator()用Plus*或者Plus()调用被包装的可调用对象,而不论是对象还是对象指针都可以调用成员函数,所以两种都可以。

---------------------------------------------------------------------------------------------------------------------------------

bind

bind是一个函数模版,他可以在一个可调用对象的基础上改变其的参数个数,参数顺序,并返回一个新函数对象。

使用如下:

_1,_2,_3....._N,这些被包含在下面的命名空间

std::placeholders;

他们是传入新函数对象(即sub1)的参数的代号,比如说sub1传入了10,5,那么_1就是10,_2就是5,而sub1会调用调用sub,在sub中你可以把_1和_2的位置变换,那么sub接受到的参数顺序是5,10,从而间接实现改变参数顺序。

当然如果bind的时候把某些参数写成具体的值,那么调用sub时这个位置的参数永远是这个值,这时你只需要传入其它参数就可以了

需要注意的是:_1,_2..._N,代表的是第一,第二,第1N个传入新函数对象的参数:

这是错误的,因为根本没传第二个参数,10是第一个参数。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值