- 浏览: 763590 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind.
bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等
_1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是占位符均可以。占位符不可以超过函数参数数量。
绑定普通函数:
绑定成员函数:
bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等
_1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是占位符均可以。占位符不可以超过函数参数数量。
绑定普通函数:
#include<boost/bind.hpp> #include<iostream> using namespace std; using namespace boost; void fun(int a,int b){ cout << a+b << endl; } int main() { bind(fun,1,2)();//fun(1,2) bind(fun,_1,_2)(1,2);//fun(1,2) bind(fun,_2,_1)(1,2);//fun(2,1) bind(fun,_2,_2)(1,2);//fun(2,2) bind(fun,_1,3)(1);//fun(1,3) } 3 3 3 4 4
绑定成员函数:
#include<boost/bind.hpp> #include<iostream> #include<vector> #include<algorithm> using namespace boost; using namespace std; struct point { int x,y; point(int a=0,int b=0):x(a),y(b){} void print(){ cout << "(" << x << "," << y << ")\n"; } void setX(int a){ cout << "setX:" << a << endl; } void setXY(int x,int y){ cout << "setX:" << x << ",setY:" << y << endl; } void setXYZ(int x,int y,int z){ cout << "setX:" << x << ",setY:" << y << "setZ:" << z << endl; } }; int main() { point p1,p2; bind(&point::setX,p1,_1)(10); bind(&point::setXY,p1,_1,_2)(10,20); bind(&point::setXYZ,p2,_1,_2,_3)(10,20,30); vector<point> v(10); //for_each的时候只需要_1就可以了 for_each(v.begin(),v.end(),bind(&point::print,_1)); for_each(v.begin(),v.end(),bind(&point::setX,_1,10)); for_each(v.begin(),v.end(),bind(&point::setXY,_1,10,20)); for_each(v.begin(),v.end(),bind(&point::setXYZ,_1,10,20,30)); } setX:10 setX:10,setY:20 setX:10,setY:20setZ:30 (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) setX:10 setX:10 setX:10 setX:10 setX:10 setX:10 setX:10 setX:10 setX:10 setX:10 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30 setX:10,setY:20setZ:30
发表评论
-
multi_index_container
2018-08-11 13:04 458根据不同的类中不同的字段排序 #include < ... -
program_options读命令行和配置文件
2018-07-27 11:30 867#include <boost/program_opti ... -
centos下boost安装
2014-03-27 09:28 1061./booststarp.sh //这里的一些错误不用管 ... -
GC的改良
2013-10-17 22:05 577分代回收:对分配不久,诞生时间较短的“年龄”对象进行重点扫描, ... -
GC与引用记数
2013-10-16 21:57 696根(Root)就是判断对象是否可被引用的起始点。至于哪里才是根 ... -
boost 信号槽
2011-06-08 23:43 2321#include<boost/signals2.hp ... -
boost reference_wrapper
2011-06-05 21:07 1564reference_wrapper是一个引用类型的包装器 ... -
元编程
2011-06-02 22:46 933元编程的最大特点在于:某些用户自定义的计算可以在程序翻译期进行 ... -
参数化虚拟性
2011-06-02 22:17 865#include<iostream> usi ... -
boost any与variant
2011-05-31 15:55 2430any:是一种只能容纳一个元素的容器,但这个元素可以是任意类型 ... -
traits
2011-05-30 16:43 792#include<iostream> usi ... -
动静多态
2011-05-30 15:40 1065由于继承||虚函数在运行期进程处理,这种多态叫动多态。 模板允 ... -
局部特化
2011-05-29 16:27 1034局部特化并不会引入一个新的模板,它只对原来模板(基本模板)进行 ... -
类模板与模板类
2011-05-29 16:08 7071.类模板:该类是一个模板,他代表的是:整个类家族的参数化描述 ... -
boost tuple
2011-05-27 15:03 1088tuple(元组):定义了一个有固定数目元素的容器,其中的每个 ... -
boost array
2011-05-27 00:06 932array本质上是一个对静态数组的包装,没有构造函数,不能指定 ... -
单元测试
2011-05-23 22:00 889test库提供了一个最小化的测试套件minimal test. ... -
boost StaticAssert
2011-05-23 21:42 938static_assert库把断言的诊断时刻由运行期提前到编译 ... -
boost正则表达式
2011-05-17 23:10 2800xpressive是boost的正则表达式库,它比boost. ... -
为什么模板要写在.h里面
2011-05-13 18:02 1108//test.h template<typena ...
相关推荐
其中,`boost::bind`是Boost库中的一个关键组件,用于实现函数对象的绑定,它类似于C++11中的std::bind,但在C++98/03标准下非常有用。 `boost::bind`的主要功能是将函数或成员函数与部分参数预先绑定在一起,形成...
在IT领域,Boost库是一个非常重要的C++工具集,它为C++标准库提供了许多扩展功能,其中`bind`和`function`是两个非常实用的工具。本文将深入探讨这两个概念以及如何在消息处理框架中使用它们。 首先,让我们了解`...
2. 多态函数对象:Boost库中的function和bind库允许将函数、成员函数以及函数对象绑定在一起,形成可重用的多态函数对象,极大地增强了C++的函数式编程能力。 3. 容器扩展:Boost库扩展了标准库中的容器,如multi_...
3. **泛型编程与元编程**: Boost库是泛型编程和元编程的典范,比如Boost.Lambda、Boost.Bind、Boost.Fusion等,它们使程序员能够编写更灵活、更具表达力的代码。 4. **数学与数值计算**: Boost库中包含数学库,如...
- **函数对象**:如`bind`和`function`,提供了函数绑定和多态函数对象的实现,简化了高阶函数的使用。 - **数学和数值计算**:如`numeric_cast`、`interval`和`ublas`,提供了精确的数值转换和高性能的线性代数...
3.2 Boost.Bind 3.3 Boost.Ref 3.4 Boost.Function 3.5 Boost.Lambda 3.6 Exercises Chapter 4: Event Handling 4.1 General 4.2 Signals 4.3 Connections 4.4 Exercises Chapter 5: String Handling 5.1 General ...
`boost::bind`和`boost::function`提供了函数对象和函数指针的通用接口;`boost::spirit`则是一个强大的解析器库,用于构建复杂语法解析器。 3. **boost-thread.pdf**: Boost.Thread库是C++线程编程的重要资源,...
Boost库的成员经常被接纳为C++标准库的一部分,例如智能指针(shared_ptr, unique_ptr)、正则表达式库、函数对象绑定器(bind)和异常安全编程工具等。 Boost库中的birthcng部分可能指的是“Bounded Integer ...
还有许多其他库,如Boost.Bind、Boost.Signals2用于函数绑定和信号槽机制,Boost.Python帮助C++与Python交互,Boost.Test则提供了单元测试框架。 压缩率5.7%表明这个压缩包在压缩后相对于原始大小减少了大部分空间...
3. **函数对象绑定**(Function and Bind):Boost.Function允许将函数、成员函数和函数对象作为通用的函数类型处理,而Boost.Bind则用于绑定函数对象和参数,简化代码。 4. **正则表达式**(Regex):Boost.Regex...
9. **多态函数对象库**:Boost.Bind和Boost.Function提供了多态函数对象和函数对象绑定的功能,增强了C++的函数调用能力。 10. **并行算法库**:Boost.Parallel提供了在多处理器和多核心系统上执行并行算法的工具。...
6. **函数对象和绑定**:Boost.Bind和Boost.Lambda提供了一种更方便的方式来创建函数对象和绑定函数,使得函数调用更加灵活。 7. **Boost.Date_Time**:提供了处理日期和时间的类和函数,支持时间间隔计算、日期...
此外,Boost.Bind和Boost.Lambda可以帮助编写更简洁的函数调用,而Boost.Function和Boost.Signals则支持函数对象和信号-槽机制,实现解耦的事件驱动编程。 在多线程编程方面,Boost.Thread库提供了比标准库更强大、...
例如,Boost.Asio提供异步I/O,Boost.Thread支持多线程编程,Boost.Bind和Boost.Lambda简化函数对象的创建,而Boost.Serialization则提供数据序列化和反序列化的功能。 总之,Boost 1.77.0 Windows平台开发包是一个...
4. **函数对象和绑定**:Function库允许将函数或函数对象作为参数传递,而Bind和Lambda库则提供了函数绑定和匿名函数的功能,增强了C++的函数式编程能力。 5. **正则表达式**:Boost.Regex库提供了高性能的正则...
2. **多态函数对象**:Boost的`function`和`bind`库允许将函数、成员函数以及函数对象组合在一起,形成可重用的、类型安全的函数对象。 3. **泛型编程**:Boost.MPL(元编程库)和Boost.Fusion是泛型编程的重要工具...
在泛型编程方面,Boost库提供了例如Boost.Lambda、Boost.Bind、Boost.Fusion等工具,使得函数对象和算法的组合更为灵活。例如,Boost.Lambda允许开发者在表达式中创建临时函数对象,而Boost.Bind则简化了成员函数和...
3. **函数对象和元编程**:Boost库包含了一系列函数对象(functors)和模板元编程工具,如`bind`、`lambda`和`mpl`,这些工具能够帮助程序员编写出更加灵活和强大的代码。 4. **并行与并发**:Boost.Asio库提供了...
在消息传递和资源管理方面,可以考虑使用Boost提供的更加现代的方法,如function/bind和shared_ptr,这些不仅影响程序的设计思路与风格,还能提升程序的性能和安全性。 Boost库中的正则表达式库对线程安全的处理是...
4. Boost.Bind:提供函数绑定功能,boost::bind。 5. Boost.Conversion:提供类型转换功能。 6. Boost.DateTime:提供日期和时间的处理功能。 7. Boost.Exception:提供异常处理相关功能。 8. Boost.Filesystem:...