IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> boost:function -> 正文阅读

[C++知识库]boost:function

function是函数对象的容器,它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象。因此可以用于回调机制,暂时保管函数或函数对象,在之后需要的时机再调用。

声明形式

#include <boost/function.hpp>
using namespace boost;

int addFunc(int a,int b,int c)
{
    return a + b + c;
}

int main()
{    
    //以下两种声明等价
    boost::function<int (int,int,int)>func1;
    boost::function<int (int a1,int a2,int a3)>func2;

    //推断类型然后声明
    boost::function<decltype (addFunc)> func3;    
}

判空和置空

#include <boost/function.hpp>
using namespace boost;

int addFunc(int a,int b,int c)
{
    return a + b + c;
}

int main()
{    
    boost::function<int (int,int,int)> func1;
//    func1(1,2,3);//未赋值就调用,会抛出bad_function_call异常

    //以下两种判空方式相等
    qDebug()<<func1.empty();
    qDebug()<< !func1 ;

    func1 = &addFunc;

    //两种置空方式
    func1.clear();
    func1 = 0;//不能等于nullptr

    //标准库的可以等于nullptr
    std::function<int (int,int,int)> func2;
    func2 = nullptr;
}

使用

#include <boost/function.hpp>
#include <boost/bind.hpp>
using namespace boost;

int addFunc(int a,int b,int c)
{
    return a + b + c;
}

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

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

    //非成员函数
    func1 = &addFunc;
    qDebug()<<func1(1,2,3);

//------------------------------------------

    //成员函数
    demo_class sc;

    //方式一
    boost::function<int(demo_class&, int,int)> func2;
    func2 = boost::bind(&demo_class::add,_1,_2,_3);
    qDebug()<<func2(sc, 10, 20);//对应三个参数

    //方式二
    function<int(int,int)> func3;
    func3 = bind(&demo_class::add,&sc, _1, _2);
    qDebug() << func3(10, 20);

    //方式一的标准库版function
    std::function<int(demo_class&, int,int)> func4;
    func4 = std::bind(&demo_class::add,std::placeholders::_1,
                                       std::placeholders::_2,
                                       std::placeholders::_3);
    qDebug()<<func4(sc, 10, 20);
}

使用 ref 库

使用 ref 可以以引用的方式传递对象:

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

int main()
{    
    demo_class sc;
    function<int(int)> func;

    func = cref(sc);
    std::cout << func(10);
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:31:36  更:2022-04-14 23:34:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:45:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码