Boost库之function的使用

 Boost库的function是一组函数对象包装类的模板,实现了一个泛型的回调机制。Boost库的function与函数指针相比,优点在于它允许用户在目标的实现上拥有更大的弹性,即目标既可以是普通函数(自由函数),也可以是函数对象和类成员函数,而且可以给函数添加状态。
使用Boost库的function,可以很好地与现有的代码融合在一起。另外,function还可以与Boost库的bind和lambda配合使用,从而极大地扩展了function的适用范围。function库支持的函数参数个数最多为10个,其头文件为function.hpp或functionX.hpp(其中,X为0到10之间的整数)。如果你的程序中只使用了X个参数的function,那么你可以只包含对应的functionX.hpp,当然,你也可以只包含function.hpp(它包含了所有的functionX.hpp)。
下面介绍function库的具体用法。
◆    普通函数(自由函数)用法
int Add(int x, int y)
{
            return x+y;
}
        function<int (int,int)> f;            // 或者  function2<int, int, int> f;
        f = Add;
        cout << "f(2, 3)=" << f(2, 3) << endl;
        其中,模板参数的第1个int为返回值类型,后两个int为参数类型。
◆    函数对象用法
class CStudent
{
public:
            void operator() (string strName, int nAge)
            {
                cout << strName << " : " << nAge << endl;
            }
};
function<void (string, int)> f;        // 或者  function2<void, string, int> f;
CStudent stu;
f = stu;
cout << "f(\"hello\", 25)=" << f("hujian", 25) << endl;
◆    成员函数用法
 struct TAdd
{
    int Add(int x,int y)
    {
        return x+y;
    }
};
         TAdd tAdd;
         function<int  (tAdd *,int,int)> f;        // 或者  function<int  (tAdd &,int,int)> f;
        f = & TAdd::Add;
        cout << f(&tAdd, 2, 3);   // 如果前面的模板参数为值或引用,直接传入tAdd即可
其中,模板参数的tAdd *为类的实例的指针,当然也可以传入类的实例或其引用,只不过调用时需要做相应的修改。
使用function时,可以通过empty函数或与0比较来判断其是否指向一个有效的函数。如果function没有指向一个有效的函数,调用时会抛出bad_function_call的异常。function的clear函数可以使其不再关联到一个函数或函数对象,如果该function本身就是空的,调用该函数也不会带来任何问题。
以上介绍了function库的最基本的一些用法,关于function库的其他应用,大家可以参考《Beyond the C++ STL》。
-- 本文来源于创世软件团队博客, 原文地址: http://www.cnblogs.com/hujian/archive/2009/06/04/1495813.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值