## Lambda 庫如何改進你的程序?
* 對函數和函數對象進行適配,使之可用于標準庫算法
* 綁定參數到函數調用
* 將任意的表達式轉換為可以兼容標準庫算法的函數對象
* 就地定義匿名函數,提高代碼的可讀性和可維護性
* 在需要的時間和地點實現謂詞
在使用標準庫或其它采用相似設計的庫時,需要依靠函數或函數對象來對算法 進行配置,你通常要編寫很多小的函數對象來執行一些非常簡單的操作。就象我們在 "[Library 9](../Text/content.html#ch09): [Bind 9](../Text/content.html#ch09)" 看到的那樣,這很容易成為一個問題,因為有大量的小類分散在代碼中,這樣很難進行維護。另外,理解函數對象被調用處的代碼會很難,因為有一部分的功能被定 義在別的地方。一個好的解決辦法是,想辦法就在調用的地方定義這些函數或函數對象。這通常可以使代碼寫得更快,也更容易維護,因為函數的定義就在它被使用 的地方。這正是 Boost.Lambda 庫所要提供的,就地定義匿名函數。Boost.Lambda 可以創建直接定義和調用的函數對象,或者把它保存起來晚一些再調用。這與 Boost.Bind 庫所提供的很相似,但 Boost.Lambda 除了可以進行參數綁定,還有其它功能,增加了控制結構、表達式到函數對象的自動轉換,還支持在 lambda 表達式中的異常處理。
術語 lambda 表達式或 lambda 函數,來源于函數式編程與 lambda 演算。一個 lambda 抽象概念定義了一個匿名函數。雖然 lambda 抽象概念在函數式編程語言(functional programming language)中非常普遍,但是在象C++這樣的命令式編程語言(imperative programming language)中則不是。但是,通過使用象表達式模板這樣的先進技術,C++ 可以在語言中增加某種形式的 lambda 表達式。
創建 Lambda 庫最早的動機是,可以在標準庫算法中使用匿名函數。因為從1998年第一個C++標準發布后,標準庫的使用非常廣泛,我們對于什么好什么不好的認識快速增 長,而其中一個存在疑問的就是,對于眾多小函數對象的定義,好象只需要一個簡單的表達式就可以滿足了。顯然這個庫就是定位于解決這些函數對象的問題,但是 對于 lambda 函數的使用還有很大的探索空間。現在,lambda 函數已經可以使用了,我們可以把它應用于以前需要用完全不同的方法來解決的問題。令人著迷和興奮的是,象C++這樣一種成熟的語言還可以探索出新的編程技 術。匿名函數和表達式模板的出現會帶來怎樣的新用法和新方法呢?事實是,我們不知道,因為我們還沒有全力去試驗它!盡管如此,這里所關注的是這個庫明確要 解決的實際問題,即通過就地定義 lambda 表達式和函數來避免代碼膨脹和功能的分散。我們可以用它做出更多驚人的事情,有了它我們可以更為簡潔,這可以同時滿足程序員和他們的經理,前者可以更加集 中精力在手邊的問題,后者可以獲得更高生產效率的好處(希望也是更容易維護的代碼!)。
- 序
- 前言
- 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 總結