Boost function使用方法

来源:互联网 发布:淘宝头像图片 编辑:程序博客网 时间:2024/06/15 20:05

function 是一个函数对象的概念。

function可以配合bind使用,存储bind表达式结果,使bind可以多次调用。

function位于命名空间boost,头文件 #include<boost/function.hpp>

1、function存储普通函数:


int f(int a, int b) { return b + a; };int main(){ //存储普通函数        function<int(int, int)> func;      //无参构造 一个function对象       assert(!func);       func = f;         //function 对象存储了f      if (func)         //function可以转换为bool值     {          std::cout << func(10, 20);       //调用function的operator()          func = 0;  //相当于func.clear()   //清空function     }}



2、function存储成员函数

 struct demo_class
    {
        int add(int a, int b) { return a + b; }
        int operator()(int x) { return x * x; }
    };

存储成员函数时 ,可以直接在function声明的函数里指定类的类型,然后用bind绑定成员函数;


    function<int(demo_class&, int, int)> func1;
    func1 = bind(&demo_class::add, _1, _2, _3);
    demo_class sc;
    std::cout << func1 << std::endl;


也可以在函数类型中仅写出成员函数签名, 在bind时直接绑定类的实例

    function<int(int, int)> func2;
    func2 = bind(&demo_class::add, &sc, _1, _2);
    std::cout << func2(10, 20);


3、使用ref库

function可以直接调用被ref库包装的函数对象,这个功能可以不分的弥补boost.ref没有operator()的缺陷

function<void(int, const& )> func(ref(x));   //function包装引用

4、用于回调




//待完善。。。。。