2.Boost之bind

简介:  1.Boost:bind #include <iostream> #include <boost/bind.hpp>   using namespace std; using namespace boost;   int f(int a, int b = 12) {     re


1.Boostbind

#include <iostream>

#include <boost/bind.hpp>

 

using namespace std;

using namespace boost;

 

int f(int a, int b = 12)

{

    return a + b;

}

 

int g(int a, int b, int c)

{

    return a + b + c;

}

 

int main(int argc, char *argv[])

{

 

    //通过下面方法调用等价于f(1,2);

    cout << "bind(f, 1, 2)() = " <<bind(f, 1, 2)() << endl;

    //同样能够绑定部分参数,例如:下方表示第二个参数传递的是15

    cout << "bind(f, 12, _1)(15) = " <<bind(f, 12, _1)(15) << endl;

    //用两个占位符

    cout << "bind(f, _1, _2)(1, 3) = " <<bind(f, _1, _2)(1, 3) << endl;

 

    cout << "----------" << endl;

 

    //引入参数调用的方式

    int i = 5;

    cout << "bind(f, i, _1)(1) = " << bind(f, i, _1)(1) << endl;

 

    cout << "----------" << endl;

 

    //等价于g(1,2,3)

    cout << "bind(g, 1, 2, 3)() = " <<bind(g, 1, 2, 3)()<< endl;

    //用三个占位符的情况

    cout << "bind(g,_1,_2,_3)(2,3,4) = " << bind(g,_1,_2,_3)(2,3,4) << endl;

 

 

    cin.get();

    return 0;

}

运行结果:

2.boost案例1

#include <iostream>

#include <string>

#include <boost/bind.hpp>

#include <vector>

#include <algorithm>

#include <functional>

 

using namespace std;

using namespace boost;

 

//绑定函数的默认值,继承二进制函数类的所有内容

class add :public std::binary_function<int, int, void>

{

public:

    void operator()(int i, int j) const

    {

        std::cout << i + j << std::endl;

    }

};

 

void add(int i, int j)

{

    std::cout << i + j << std::endl;

}

 

void main()

{

    vector<int> myv;

    myv.push_back(11);

    myv.push_back(23);

    myv.push_back(34);

 

    for_each(myv.begin(), myv.end(), bind(add, 13, _1));

    cin.get();

}

运行结果:

3bind并不仅仅限于方法,下面的例子是绑定结构体的情况。

#include <iostream>

#include <boost/bind.hpp>

#include <algorithm>

#include <cassert>

 

using namespace std;

using namespace boost;

 

struct F

{

    int operator()(int a, int b){ return a - b; };

    bool operator()(long a, long b){ return a == b; };

};

 

struct F2

{

    int s;

    typedef void result_type;

    void operator()(int x)

    {

        s += x;

        std::cout << "x = " << x <<" s = "<< s << std::endl;

    }

};

 

int main(int argc,char *argv[])

{

    F f;

    int x = 104;

 

    //通过:bind<R>(f, ...) 这种语法,但是

    cout << "bind<int>(f, _1, _2)(10,5) = " <<bind<int>(f, _1, _2)(10,5) << endl;

 

    cout << "---------" << endl;

    //通过:boost::bind(boost::type<R>(),f,_1,_2)(x,y);的方式进行绑定

    cout << "boost::bind(boost::type<int>(), f, _1, 3)(8)= "<<boost::bind(boost::type<int>(), f, _1, 3)(8) << endl;

 

    F2 f2 = { 0 };

    int a[] = { 1, 2, 3 };

 

    cout << "---------" << endl;

    //for_each#include <algorithm>中的

    for_each(a, a + 3, bind(std::ref(f2), _1));

    //下面的是#include <cassert>头文件中的

    //assert(f2.s == 6);

 

    cin.get();

    return 0;

}

运行结果:

 

 

 

目录
相关文章
|
6月前
|
前端开发 JavaScript 开发者
2025 最新 100 道 CSS 面试题及答案解析续篇
本文整理了100道CSS面试题及其答案,涵盖CSS基础与进阶知识。内容包括CSS引入方式、盒模型、选择器优先级等核心知识点,并通过按钮、卡片、导航栏等组件封装实例,讲解单一职责原则、样式隔离、响应式设计等最佳实践。适合前端开发者巩固基础、备战面试或提升组件化开发能力。资源地址:[点击下载](https://pan.quark.cn/s/50438c9ee7c0)。
134 5
2025 最新 100 道 CSS 面试题及答案解析续篇
|
10月前
|
移动开发 数据安全/隐私保护 UED
免费生成产品说明书二维码:生成工具推荐
本文详细介绍了产品说明书二维码的优势、制作工具和教程,并解答了常见问题。了解如何利用二维码提升产品用户体验,降低成本
|
算法 关系型数据库 MySQL
mysql view 更新问题
【8月更文挑战第28天】mysql view 更新问题
194 3
|
缓存 JavaScript 安全
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
2012 0
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
|
12月前
|
SEO
CMS建站系统是什么?如何选择CMS建站系统?
本文对CMS建站系统进行了介绍,包括其类型、核心功能以及建站业务流程,希望帮助读者了解和选择适合自家企业的产品。
729 7
|
iOS开发 MacOS Windows
【Mac 系统】如何在office的Word中使用LaTeX公式
一个在Mac版Microsoft Word中使用LaTeX语法插入公式的间接方法,通过Pages文稿创建和编辑LaTeX公式后再复制到Word中。
1297 2
|
机器学习/深度学习 自然语言处理 算法
什么是自然语言处理的语义理解?
【4月更文挑战第8天】
552 2
什么是自然语言处理的语义理解?
|
SQL 存储 BI
什么是视图?详细解析与应用指南
【8月更文挑战第31天】
2412 0
|
机器学习/深度学习 传感器 编解码
基于matlab实现16个调频脉冲信号的产生、脉冲压缩、MTI、MTD、CFAR等信号处理算法
基于matlab实现16个调频脉冲信号的产生、脉冲压缩、MTI、MTD、CFAR等信号处理算法
|
机器学习/深度学习 存储 并行计算
深度学习之适应硬件的神经网络
深度学习的适应硬件的神经网络设计旨在最大限度地利用特定硬件平台的计算和存储能力,提高模型的执行效率和性能。这些硬件包括图形处理单元(GPU)、张量处理单元(TPU)、现场可编程门阵列(FPGA)和专用集成电路(ASIC)。
259 0