## Bind 库如何改进你的程序?
* 使函数和函数对象适用于标准库算法
* 使用一致语法创建绑定器
* 强大的函数组合
在使用来自于标准库的算法时,你常常需要提供给它们一个函数或一个函数对象。这是对算法的行为进行定制的一个好方法,但你通常需要写一个新的函数对象,因为你没有组合函数或改变参数的顺序等所需的工具。虽然标准库已经提供了一些可用的工具,如 `bind1st` 和 `bind2nd`, 但是这不够用。即使功能上够用了,但这通常意味着要忍受笨拙的语法,这些语法通常会让不熟悉这些工具的程序员产生混乱。你需要的是一个解决方案,既具备所需功能,又可以使用普通的语法就地创建函数对象,这正是 Boost.Bind 所要做的。
事实上,泛型绑定器是一种 lambda 表达式,因为通过函数组合,我们可以或多或少在调用点构造一个局部的、无名的函数。在许多情形下这都是需要的,因为它达到了三个目的:减少了代码的数量, 使代码更易懂,还有行为的局部化,这意味着更有效的维护。注意,还有另一个 Boost 库,Boost.Lambda, 它具有更多的特性。Boost.Lambda 将在下一章中讨论。为什么你不直接跳到下一个库?因为多数情况下,Boost.Bind 可以完成你要绑定的所有东西,并且学习曲线没那么陡。
Bind 成功的一个关键是采用统一的语法来创建函数对象,以及对于使用该库的类型只有很少的要求。这种设计使得无需关注如何去写与你的类型一起工作的代码,而只需关注我们最关心的一点,代码如何工作以及它实际上做了什么。使用来自标准库的适配器时,如 `ptr_fun` 和 `mem_fun_ref`, 代码很容易变得过分冗长,因为我们必须提供这些适配器以便参数可以符合算法的要求。在 Boost.Bind 里不是这样的,它使用了更为精妙的推断系统,并且在自动推断不能适用时提供了一个简单的语法。使用 Bind 的结果就是,你可以写更少的代码,而且代码更易懂。
- 序
- 前言
- Acknowledgments
- 关于作者
- 本书的组织结构
- Boost的介绍
- 字符串及文本处理
- 数 据结构, 容器, 迭代器, 和算法
- 函数对象及高级编程
- 泛 型编程与模板元编程
- 数学及数字处理
- 输入/输出
- 杂项
- Part I: 通用库
- Library 1. Smart_ptr
- Smart_ptr库如何改进你的程序?
- 何时我们需要智能指针?
- Smart_ptr如何适应标准库?
- scoped_ptr
- scoped_array
- shared_ptr
- shared_array
- intrusive_ptr
- weak_ptr
- Smart_ptr总结
- Library 2. Conversion
- Conversion 库如何改进你的程序?
- polymorphic_cast
- polymorphic_downcast
- numeric_cast
- lexical_cast
- Conversion 总结
- Library 3. Utility
- Utility 库如何改进你的程序?
- BOOST_STATIC_ASSERT
- checked_delete
- noncopyable
- addressof
- enable_if
- Utility 总结
- Library 4. Operators
- Operators库如何改进你的程序?
- Operators
- 用法
- Operators 总结
- Library 5. Regex
- Regex库如何改进你的程序?
- Regex 如何适用于标准库?
- Regex
- 用法
- Regex 总结
- Part II: 容器及数据结构
- Library 6. Any
- Any 库如何改进你的程序?
- Any 如何适用于标准库?
- Any
- 用法
- Any 总结
- Library 7. Variant
- Variant 库如何改进你的程序?
- Variant 如何适用于标准库?
- Variant
- 用法
- Variant 总结
- Library 8. Tuple
- Tuple 库如何改进你的程序?
- Tuple 库如何适用于标准库?
- Tuple
- 用法
- Tuple 总结
- Part III: 函数对象与高级编程
- Library 9. Bind
- Bind 库如何改进你的程序?
- Bind 如何适用于标准库?
- Bind
- 用法
- Bind 总结
- Library 10. Lambda
- Lambda 库如何改进你的程序?
- Lambda 如何适用于标准库?
- Lambda
- 用法
- Lambda 总结
- Library 11. Function
- Function 库如何改进你的程序?
- Function 如何适用于标准库?
- Function
- 用 法
- Function 总结
- Library 12. Signals
- Signals 库如何改进你的程序?
- Signals 如何适用于标准库?
- Signals
- 用法
- Signals 总结