博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
boost::function介绍
阅读量:4191 次
发布时间:2019-05-26

本文共 1234 字,大约阅读时间需要 4 分钟。

1. 介绍

    Boost.Function库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的特性但是又包含了一个调用的接口。一个函数指针能够在能以地方被调用或者作为一个回调函数。boost.function能够代替函数指针并提供更大的灵活性。
2. 使用
    Boost.Function有两种形式:boost::function<float(int x, int y)>f
    使用类型: 普通函数, 成员函数, 函数对象。
    使用function时,可以通过empty函数或与0比较来判断其是否指向一个有效的函数。如果function没有指向一个有效的函数,调用时会抛出bad_function_call的异常。function的clear函数可以使其不再关联到一个函数或函数对象,如果该function本身就是空的,调用该函数也不会带来任何问题。
3.例子

int fsum(int i, int j)

{

    return i + j;

}

 

class Person

{

public:

    void operator() (std::string name, int age)

    {

        std::cout << name << ": " << age << std::endl;

    }

};

 

class Car

{

public:

    Car(){}

    virtual ~Car(){}

    void info(int i)

    {

        std::cout << "info = " << i << std::endl;

    }

};

 

void test_function()

{

    // 1. 普通函数

    boost::function<int(int, int)> func1;

    func1 = fsum;

    std::cout << "4 + 5 = " << func1(4, 5) << std::endl;

 

    // 2. 函数对象

    boost::function<void(std::string, int)> func2;

    Person person;

    func2 = person;

    func2("myname", 30);

 

    // 3. 成员函数

    boost::function<void(Car*, int)> func3;

    func3 = &Car::info;

    Car car;

    func3(&car, 25);

 

    // 4. 空函数

    boost::function<int(int, int)> func4;

    assert(func4.empty());

    assert(!func1.empty());

    func1.clear();

    assert(func1.empty());

    try

    {

        func1(4, 5);

    }

    catch (std::exception& e)

    {

        std::cout << e.what() << std::endl;

    }

}

转载地址:http://juloi.baihongyu.com/

你可能感兴趣的文章
小米再回应造车传闻:一直关注,还没正式立项
查看>>
23岁女子搬家途中跳车身亡!货拉拉官方回应......
查看>>
《你好李焕英》票房反超《唐探3》 成中国影史票房第五
查看>>
又到了充钱的时候!苹果AirPods 3最快下月发布
查看>>
抖音不服诉腾讯管辖权被转至深圳中院 上诉获受理
查看>>
晶圆产能紧缺,成就华为的“无厂模式”反成败笔
查看>>
靠手速!华为新旗舰今晚发布:价格破万
查看>>
入职大厂,我容易吗?
查看>>
腾讯网易侧目!字节跳动游戏官网正式上线:品牌名为“朝夕光年”
查看>>
官方晒中兴AXON 30 Pro真机亮屏谍照:第二代屏下摄像头技术提升明显
查看>>
特斯拉股价周一大跌8.55% 市值缩水640亿美元
查看>>
17999元起!华为Mate X2发布:4月起首批升级鸿蒙系统
查看>>
格力:核心科技有时也是高利贷
查看>>
特斯拉中国公开统一维保价格
查看>>
华为Mate X2黄牛价已超两万,结果小伙子没拿稳,成全网首摔?
查看>>
3月1日见,魅族新品要来了!
查看>>
特斯拉标准续航版Model Y为什么下架?马斯克这么回答
查看>>
中微公司2020年净利4.92亿元 投资中芯国际赚2.62亿
查看>>
字节跳动2021春招启动 提供超7000个岗位
查看>>
消息称华为计划推出自有品牌电动汽车 官方重申不造车
查看>>