可调用对象

我们可以向算法传递任何类别的可调用对象:函数,函数指针,重载了函数调用运算符的类,lambda表达式,bind函数。

函数对象:

1)如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。因为这样的类同时也能存储状态,所以与普通函数相比他们更加灵活。

例: struct absInt{

int operator() (int) const

{return val<0 ?-val :val ;}

}

int i=42;

absint absobj;

int ui=absobj(i);

2)函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符,相互之间以重载的方式进行。

3)函数对象常常作为泛型算法的实参

4lambda是函数对象:lambda表达式产生的类不含默认构造函数,赋值运算符及默认析构函数。

5)标准库定义的函数对象


标准库定义了一组表示算术运算,关系运算符,逻辑运算符的类。每个类分别定义了一个执行命令操作的调用运算符。

function  模板, 生成可调用对象

声明:function<int (int ,int)> f1=add;

  function<int(int ,int)> f2=divide();

  function<int (int,int)> f3=[](int i, int j) {return i*j;} ;

应用:

  cout<<f1(4,2)<<endl;

  cout<<f2(4,2)<<endl;

  cout<<f3(4,3)<<endl;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值