C++ boost 組件簡介:函數對象及高級編程

 

函數對象及高級編程

Boost.Bind

Bind是對標準庫的綁定器bind1stbind2nd的泛化。這個庫支持使用統一的語法將參數綁定到任何類似於函數行爲的東西,如函數指針、函數對象,以及成員函數指針。它還可以通過嵌套綁定器實現函數組合。這個庫不要求那些對標準庫綁定器的強制約束,最顯著的就是不要求你的類提供typedefs result_type, first_argument_type, 和 second_argument_type 等。這個庫也使得我們不再需要用 ptr_fun, mem_fun, 和 mem_fun_ref 等適配器。它是對C++標準庫的一個重要且很有用的擴充。Bind可以被標準庫的算法使用,也經常用於Boost的函數,它提供了一個強大的工具,用於存放後續調用的函數和函數對象。Bind 已被即將發佈的Library Technical Report所接受。

Bind 的作者是 Peter Dimov.

Boost.Function

Function庫實現了一個泛型的回調機制。它提供了函數指針、函數對象和成員函數指針的存儲和後續的調用。當然,它與binder庫,如Boost.Bind 和 Boost.Lambda一起工作,大大提高了回調(包括帶態度的回調函數)的使用機會。Function常用於需要把函數指針用於回調的地方。例如:信號/接收者的實現,GUI與業務邏輯的分離,以及在標準庫容器中存儲不同的類函數類型。Function已被即將發佈的Library Technical Report所接受。

Function 的作者是 Douglas Gregor.

Boost.Functional

Functional庫提供C++標準庫的適配器的加強版。主要的優勢是它有助於解決引用到引用(這是非法的)的問題,這個問題是由對帶有一個或多個引用參數的函數使用標準庫的綁定器所引起的。Functional同時消除了在標準庫算法中使用函數指針時必須用ptr_fun的問題。

Functional 的作者是 Mark Rodgers.

Boost.Lambda

Lambda爲C++提供lambda表達式及無名函數。在使用標準庫算法時特別好用,Lambda允許函數在呼叫點創建,避免了創建多個小的函數對象。使用lambdas意味着更少的代碼,在哪需要就在哪寫,這比分散在代碼各處的函數對象更清晰、更好維護。

Lambda 的作者是 Jaakko Järvi 和 Gary Powell.

Boost.Ref

許多函數模板,包括大量標準C++庫裏的函數模板,它們的參數採用傳值的方式傳遞,有時候會有問題。複製一個對象可能很昂貴或者甚至不可能,或者狀態可能取決於特寫的實例,因此這時複製是不希望的。在這些情況下,可用的辦法是用引用傳遞取代值傳遞。 Ref包裝了一個對象的引用,並把它放入一個對象以便被複制。這就允許了通過引用去調用那些採用傳值參數的函數。Ref 已被即將發佈的Library Technical Report所接受。

Ref 的作者是 Jaakko Järvi, Peter Dimov, Douglas Gregor, 和 David Abrahams.

Boost.Signals

信號和接收系統,基於稱爲publisher-subscriberobserver的模式,它是在一個最小相關性系統中管理事件的重要工具。很少有大型應用軟件不採用這種強大設計模式的某種變形,儘管他們有各自的實現方式。Signals提供了一個已驗證的、高效的手段,將信號(events/subjects)的發生和這些信號要通知的接收者(subscribers/observers)進行了分離。

Signals 的作者是 Douglas Gregor.


來源:Beyond the C++ Standard Library An Introduction to Boos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章