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 (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);

你可能感兴趣的:(c)