C++ boost 組件簡介:泛型編程與模板元編程

 

泛型編程與模板元編程

Boost.Call_traits

這個庫提供了傳遞參數給函數的最好方法的自動演繹,依據參數的類型。例如,當傳遞的是如intdouble這樣的內建類型,最高效的方式是傳值。對於用戶自定義類型,則傳送const引用通常更好。Call_traits爲你自動選擇正確的參數類型。這個庫還有助於聲明參數爲引用,而不用冒引用到引用的風險(在C++這是非法的)。Call_traits常用於要求以最高效方式傳遞參數而又不知道參數類型的泛型函數,並避免引用到引用的問題。

Call_traits 的作者是 Steve Cleary, Beman Dawes, Howard Hinnant, 和 John Maddock.

Boost.Concept_check

Concept_check提供一些類模板,用於測試特定的概念(需求的集合)。泛型(參數化的)代碼要求實例化時的類型必須符合某些抽象概念,如LessThanComparable. 這個庫提供了一些方法來明確地聲明模板的參數化類型的特定需求。代碼的用戶可以獲益,由於需求的文檔化以及編譯器可以產生錯誤信息以明確指出類型不符合這些概念的地方。Boost.Concept_check提供了超過30個可用於泛型代碼的概念,其中一些原型可用於校驗包括所有相關概念的組件的實現。它用於在泛型代碼中聲明和證明概念的需求。

Concept_check 的作者是 Jeremy Siek, 他從Alexander Stepanov and Matt Austern的前期工作中得到靈感。

Boost.Enable_if

Enable_if允許函數模板或類模板的特化體包括/排除在一組匹配的函數或特化體之中/之外。主要的用例是包括/排除基於某些特性的特化體。例如,僅當採用一個整數類型實例化時使能一個函數模板。這個庫還爲SFINAE(substitution failure is not an error)提供了一個非常有用的研究機會。

Enable_if 的作者是 Jaakko Järvi, Jeremiah Willcock, 和 Andrew Lumsdaine.

Boost.In_place_factory

In_place_factory庫是一個直接構造所含對象的框架,包括用於初始化的可變參數列表。它可以消除對所含類型必須是CopyConstructible的要求,並減少了創建不必要的臨時對象的需要,該臨時對象僅用於提供複製所需的源對象。這個庫有助於減少傳送用於對象初始化的參數所需的工作量。

In_place_factory 的作者是 Fernando Cacciola.

Boost.Mpl

Mpl是一個模板元編程庫。它包含了與C++標準庫十分相象的數據結構和算法,但它們是在編譯期使用的。甚至有編譯期的lambda表達式支持!提供編譯期的操作,如產生類型或操作類型序列,在現代C++中越來越普遍,而提供這些功能的庫是非常重要的工具。就我所知,還沒有其它象Mpl這樣的庫。它填充了C++元編程世界的空白。我可以告訴你在你讀本書時有一本關於Boost.Mpl的書正在創作,它就快要面世了,它就是Aleksey Gurtovoy 和 David Abrahams所著的C++ Template Metaprogramming。你應該儘快獲得一本。

Mpl 的作者是 Aleksey Gurtovoy, 並有許多其它人的重要貢獻。

Boost.Property_map

Property_map是一個概念庫而不是一個真正的實現。它引入了 property_map 概念以及property_map類型的一組要求,從而給出了對一個key和一個value的映射的語法和語義要求。這在需要聲明必須支持的類型的泛型代碼中很有用。C++數組是一個property_map的例子。這個庫包含了Boost.Concept_check可以測試的概念的定義。

Property_map 的作者是 Jeremy Siek.

Boost.Static_assert

進行編譯期編程的一個公共的需求是提供靜態斷言,即編譯期斷言。另外,獲得一致的錯誤提示不是必然的,由於靜態斷言必須會產生失敗斷言的信號,跨不同的編譯器。Static_assert提供對名字空間、類、函數作用域的靜態斷言的支持。

Static_assert 的作者是 Dr. John Maddock.

Boost.Type_traits

成功的泛型編程通常需要根據參數化類型進行決策或調整這些類型的屬性(如cv-qualification[2])。Type_traits提供關於類型的編譯期信息,如某個類型是否指針或引用,以及增加或去除類型基本屬性。Type_traits已被加入即將發佈的Library Technical Report。

[2] 一個類型可以是cv-unqualified (非 constvolatile), const-qualified (const), volatile-qualified (聲明爲 volatile), or volatile-const-qualified (既 constvolatile); 類型的這些版本都是獨特的。

Type_traits 的作者是 Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant, Jesse Jones, Mat Marcus, John Maddock, 和 Jeremy Siek, 以及其它許多人的貢獻。


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



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