## Bind
### 頭文件: `"boost/bind.hpp"`
Bind 庫創建函數對象來綁定到一個函數(普通函數或成員函數)。不需要直接給出函數的所有參數,參數可以稍后給,這意味著綁定器可以用于創建一個改變了它所綁定到的函數的 arity (參數數量) 的函數對象,或者按照你喜歡的順序重排參數。
函數 `bind` 的重載版本的返回類型是未指定的,即不能保證返回的函數對象的特征是怎樣的。有時,你需要將對象存于某處,而不是直接把它傳送給另一個函數,這時,你要使用 Boost.Function, 它在 "[Library 11](../Text/content.html#ch11): [Function 11](../Text/content.html#ch11)." 中討論。弄明白 `bind` 函數返回的是什么的關鍵在于,理解它發生了什么轉換。用 `bind` 函數的一個重載,`template<class R, class F> unspecified-1 bind(F f)`來作為例子,返回類型就是 (引用自在線文檔),"一個函數對象 l ,表達式 l(v1, v2, ..., vm) 等同于 f(),隱式轉換為 R"。這樣,這個被綁定的函數就被保存在綁定器里面,以后對這個函數對象的調用就會得到被綁定的函數的返回值(如果有),即模板參數 `R`. 我們在這討論的實現支持最多九個函數參數。
Bind 的實現包括許多函數和類,但作為用戶來說,我們不直接使用除了重載函數 `bind` 以外的任何東西。所有綁定通過 `bind` 函數發生,我們可以無須依賴于返回值的類型。使用 `bind` 時,參數占位符(命名為 `_1`, `_2`, 等等)不需要用一個using聲明或using指示來引入,因為它們位于匿名名字空間。這樣,在使用 Boost.Bind時,沒有理由寫出以下的代碼。
```
using boost::bind;
using namespace boost;
```
前面曾經提到過,當前的 Boost.Bind 實現支持九個占位符(`_1`, `_2`, `_3`, 等等),也就是說最多九個參數。粗略地過一下大綱對于深入理解如何進行類型推斷是有好處的,還可以知道何時/為何它不總是可以工作的。花點時間分析一下成 員函數指針與普通函數的署名特征也是很有用的。你將會看到對于普通函數和類成員函數,各有各的重載版本。還有,對于每一個數量的參數,也都有不同的重載。 我不在這里列出所有大綱了,建議你到[www.boost.org](http://www.boost.org/)參考一下 Boost.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 總結