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;

}

运行结果:

 

 

 

目录
相关文章
|
7月前
|
移动开发 数据安全/隐私保护 UED
免费生成产品说明书二维码:生成工具推荐
本文详细介绍了产品说明书二维码的优势、制作工具和教程,并解答了常见问题。了解如何利用二维码提升产品用户体验,降低成本
|
7月前
|
人工智能 自然语言处理 供应链
做国际物流为什么要做代购系统
国际物流企业引入代购系统,旨在应对全球化购物需求、提升服务竞争力并优化业务效率。该系统整合采购、支付、清关、运输等环节,提供一站式服务,解决语言障碍和物流复杂等问题。通过代购服务费、商品差价等方式拓展收入来源,同时提升客户粘性和留存率。代购系统还能优化物流安排,降低空载率和单件成本,形成差异化竞争优势,并通过自动合规和透明化流程降低风险。最终,物流企业从单纯的运输服务商升级为跨境供应链管理者,实现利润增长与市场竞争力的双重突破。
|
算法 关系型数据库 MySQL
mysql view 更新问题
【8月更文挑战第28天】mysql view 更新问题
159 3
|
9月前
|
弹性计算 人工智能 自然语言处理
云工开物:阿里云弹性计算走进高校第2期,与北京大学研一学生共探AI时代下的应用创新
阿里云高校合作、弹性计算团队​于北京大学,开展了第2届​【弹性计算进校园】​交流活动。
|
9月前
|
SEO
CMS建站系统是什么?如何选择CMS建站系统?
本文对CMS建站系统进行了介绍,包括其类型、核心功能以及建站业务流程,希望帮助读者了解和选择适合自家企业的产品。
588 7
|
10月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
267 1
Gateway服务网关
|
缓存 JavaScript 安全
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
1842 0
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
|
iOS开发 MacOS Windows
【Mac 系统】如何在office的Word中使用LaTeX公式
一个在Mac版Microsoft Word中使用LaTeX语法插入公式的间接方法,通过Pages文稿创建和编辑LaTeX公式后再复制到Word中。
1046 2
|
机器学习/深度学习 自然语言处理 算法
什么是自然语言处理的语义理解?
【4月更文挑战第8天】
415 2
什么是自然语言处理的语义理解?
|
SQL 存储 BI
什么是视图?详细解析与应用指南
【8月更文挑战第31天】
2038 0