Boost function使用方法

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、用于回调




//待完善。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值