std::function用法

std::function的用法

《effective c++》条款35上看到了 std::tr1和std::bind 的用法,以前从来没有接触过这两个功能。写一篇博客加深印象。

std::function是c++11标准化的产物,在c++11官方文档上介绍是多形态函数包装(general-purpose polymorphic function wrapper),它的实例可以存储,拷贝,调用任何可callable目标。包括函数,lambda表达式,bind表达式,或者是其它函数对象(仿函数),也可以是成员函数或者是指向成员函数的指针。

用法有点多,使用例子来说明,首先使用typedef,如下所示定义一个std::function:My_func

typedef std::tr1::function<void (int)> My_func;

这样就有了一个返回值为void,有一个int型参数的函数原型。std::function一般有一下三种用法。

  1. 替代原来的函数指针
void fun1(int a){cout<<"hello";}
My_func func=func1;
  1. 仿函数对象
class Test2{
public:
    void operator()(int){}
};
My_func func=Test2()
  1. 结合std::bind

    注意第三个参数“_1”定义在std::palceholder中,代表有一个参数。

class Test{
public:
    void fun(int a){cout<<"hello";}
};
Test test;
My_func func=std::tr1::bind(&Test::fun,test,std::placeholders::_1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值