c++11之std::function

作用:

可以对函数指针(包括全局函数,类成员函数,类静态成员函数),lambda表达式,仿函数做类型消除,也就是说可以将这些可调用实体都转换成std::function类型。

使用示例

#include <iostream>
using namespace std;

void global_func(int a){//全局函数
    cout<<"call global_func:"<<a<<endl;
}

auto labmda = [](int a){cout<<"lambda:"<<a<<endl;};

class ClassA{
public:
    void member_func(int a){//类成员函数
        cout<<"call ClassA::member_func:"<<a<<endl;
    }
    
    static void static_member_func(int a){//类静态函数
        cout<<"call ClassA::static_member_func:"<<a<<endl;
    }
};

class Functor{//仿函数
public:
    void operator()(int a){
        cout<<"call Functor()"<<a<<endl;
    }
};

int main(int argc, const char * argv[]) {
    function<void(int)> func;
    func = global_func;
    func(10);
    
    func = labmda;
    func(11);
    
    Functor testFunctor;
    func = testFunctor;
    func(12);
    
    ClassA a_object;
    func = std::bind(&ClassA::member_func, &a_object, std::placeholders::_1);
    func(13);
    
    func = std::bind(&ClassA::static_member_func, std::placeholders::_1);
    func(14);
    return 0;
}

输出结果:

call global_func:10
lambda:11
call Functor()12
call ClassA::member_func:13
call ClassA::static_member_func:14

注意事项

  1. 转换后的std::function的参数 能转换成 转换前的可调用实体的参数
  2. 转换前的可调用实体的返回值 能转换成 转换后的std::function的返回值
  3. std::function对象不能用来比较相等或者不等,但是可以用来跟nullptrNULL比较
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容