## Tuple 庫如何改進你的程序?
* 從函數返回多個返回值
* 相關類型的組合
* 將數值組合起來
與許多其它的編程語言一樣,C++允許函數返回一個數值。但是,這一個數值可以是任意的類型,你可以用一個 `struct` 或 `class` 把多個數值組合起來作為結果。雖然可以,但是用這樣的結構來組合相關的返回值通常都是很不方便的,因為這意味著要為對一種返回類型進行定義。為了避免在返回值中拷貝大量的對象,同時也為了避免創建一個特殊的類型用于從函數返回多個數值,我們常常使用非 `const` 引用參數或者指針參數,從而允許函數通過這些參數設置調用者的變量。在多數情況下這樣做都工作良好,但也有人不愿意使用輸出參數。還有,輸出參數不能明確指出返回值就是返回值。有些時候,`std::pair` 可以滿足要求,但在需要返回兩個以上數值時,它就不能滿足要求了。
為了提供多個返回值,我們需要一個 tuple 結構。一個 tuple 是一個固定大小的、多個指定類型的數值的聚集。相應的例子包括有:pairs, triples, quadruples, 等等。有些語言本身就內建有這樣的 tuple 類型,但C++沒有。借助C++本身的強大功能,這一缺點可以通過庫來彌補,如你所想, Boost.Tuple 正是這樣的一個庫。
Tuple 庫提供了 tuple 結構,它可以方便地用于返回多個數值,也可以組合任意的類型并以泛型代碼來操作它們。
- 序
- 前言
- 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 總結