boost::function库简介

boost::function Boost.Function库用来提供一个对象化的函数指针,通过它可以很容易的将一个函数封装为仿函数。

boost::function库可以支持自由函数,函数对象,类成员函数。而且参数个数多达10个。boost::function库利用模板技术来实现。生成的代码有很高的运行效率。首先我们还是以一个例子简单的说明它的用法:

#include <iostream>
#include <boost/function.hpp>

using namespace std;

float add(int x,float y)
{
    return x + y;
}

int main()

    boost::function<float (int x, float y)> f = &add; // function 方括号里面填写函数类型 //一定有他的作用
    cout<<"add(3,2) is "<<f(3,2)<<endl;
}

在上面的例子中,

定义了一个仿函数,它指向add函数。这个是一种比较容易理解的方式,也是boost推荐的写法,但有的编译器不支持(其实大多数主流编译器都支持)这种模板的语法,不支持的编译器包括:

  • Microsoft Visual C++ 6.0, 7.0
  • Borland C++ 5.5.1
  • Sun WorkShop 6 update 2 C++ 5.3
  • Metrowerks CodeWarrior 8.1

如果你用了上述编译器,则应使用

boost::function2<floatintfloat> f;

的形式。

如果只是封装普通函数(功能类似函数指针),则使用方式和普通函数指针类似,可以直接通过"="来进行函数的封装,通过"()"来实现函数的调用。

如果用它来封装成员函数(用函数指针来指向成员函数用起来可不是一般的恶心),可以通过如下两种方式:

  1. 通过boost::bind库实现。
  2. 通过stl库std::bind1st和std::mem_fun 函数组合实现。

下面是一个简单的示例:

struct X
{
    bool foo(int a){ cout<<a<<endl; return false;}
};

int main()

    boost::function<bool (int)> f;
    X x;

    f = boost::bind(&X::foo, &x, _1);
    f(5);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值