BOOST--學了很久的C++
阿新 • • 發佈:2019-01-02
學習了很久的C++,不過最近才知道有BOOST這個東西,還是在程式設計師雜誌上看到JJHOU先生寫的關於BOOST 使用的系統文章時才決定來關注一下這個神祕的東西。下面是網上找的一篇文章,看完之後作了一些修改,可以對大家有用吧。
一直流傳這麼一個說法,想成為高手,一定要多讀高手寫的原始碼。哪些程式碼是好材料呢?C++標準庫的原始碼?不,如果您讀過,就會發現:要麼是各種實現獨有的表達方式讓人摸不著頭腦,要麼是恐怖的程式碼風格(如到處是下劃線)憋得人難受。Boost庫的程式碼則相當清晰,註釋合理,命名規範,絕對是適合閱讀的典範。同時,Boost內容廣泛,數值計算、泛型程式設計、超程式設計、平臺API
Boost是什麼?一套開放原始碼、高度可移植的C++庫。
誰發起的?C++標準委員會庫工作組。所以,質量保證,不怕遇到假冒偽劣產品。
其中所包含的內容:
字串及文字處理
Boost.Regex
正則表示式是解決大量模式匹配問題的基礎。它們常用於處理大的字串,子串模糊查詢,按某種格式tokenize字串,或者是基於某種規則修改字串。由於C++沒有提供正則表示式支援,使得有些使用者被迫轉向其它支援正則表示式的語言,如Perl, awk, 和 sed。Regex提供了高效和強大的正則表示式支援,基於與STL同樣的前提而設計,這使得它很容易使用。Regex已被即將釋出的Library Technical Report接受。更多的資訊,請見"Library 5: Regex."
Boost.Spirit
[1] Wave庫使用Spirit實現了一個與C++高度一致的前處理器,就證明了這一點。
Boost.String_algo
這是一組與字串相關的演算法。包括很多有用的演算法,用於大小寫轉換,空格清除,字串分割,查詢及替換,等等。這組演算法是目前C++標準庫裡已有功能的擴充套件。
Boost.Tokenizer
這個庫提供了把字元序列分割成記號(token)的方法。通用的語法分析任務包括了在已分割的文字流裡查詢資料。如果可以把字元序列視為多個元素的容器將很有幫助,容器中的元素被執照使用者定義的規則所分割。語法分析就成為了在這些元素上進行操作的單個任務,Tokenizer正好提供了這種功能。使用者可以決定字元序列如何被分割,在使用者請求新的元素時,庫將找出相應的記號。
資料結構, 容器, 迭代器, 和演算法
Boost.Any
Any庫支援型別安全地儲存和獲取任意型別的值。當你需要一個可變的型別時,有三種可能的解決方案:無限制的型別,如 void*. 這種方法不可能是型別安全的,應該象逃避災難一樣避免它。可變的型別,即支援多種型別的儲存和獲取的型別。支援轉換的型別,如字串型別與整數型別之間的轉換。Any實現了第二種方案,一個基於值的可變化的型別,無限可能的型別。這個庫通常用於把不同型別的東西儲存到標準庫的容器中。更多的說明請見 "Library 6: Any."
Boost.Array
這個庫包裝了普通的C風格陣列,給它們增加了一些來自於標準庫容器的函式和typedef 。其結果就是可以把普通的陣列視為標準庫的容器。這非常有用,因為它增加了型別安全性而沒有降低效率,而且它使得標準庫容器和普通陣列擁有統一的語法。後一點意味著可以把普通陣列用於大多數的要求容器類來操作的函式。當要求軟體要達到普通陣列的效能時,可以用Array來替代std::vector.
Boost.Compressed_pair
這個庫包括一個引數化的型別, compressed_pair, 它非常象標準庫中的 std::pair. 與std::pair不同之處在於, boost::compressed_pair 對模板引數進行評估,看其中有沒有空的引數,如果有,使用空類優化技術來壓縮pair的大小。Boost.Compressed_pair 常用於存放一對物件,其中之一或兩個都可能是空的。
Boost.Dynamic_bitset
Dynamic_bitset庫非常象std::bitset, 除了std::bitset 是用引數來指定位數(即容器的大小), 而boost::dynamic_bitset 則支援在執行期指定大小。dynamic_bitset 支援與std::bitset一樣的介面,還增加了支援執行期特定功能的函式和一些std::bitset中沒有的功能。在bitset的大小無法在編譯期確定或在程式執行時可能變化的情況下,這個庫通常用於替換std::bitset。
Boost.Graph
Graph是一個處理圖結構的庫,它的設計受到STL的重要影響。它是泛型的,高度可配置,並且包括多個不同的資料結構:鄰接連結串列, 鄰接矩陣, 和邊列表。Graph還提供了大量的圖演算法,如Dijsktra最短路徑演算法,Kruskal最小生成樹演算法,拓樸邏輯排序,等等。
Boost.Iterator
這個庫提供一個建立新的迭代器型別的框架,還提供了許多有用的迭代器介面卡,比C++標準中定義的更多。建立遵循標準的新迭代器型別是一件困難且乏味的工作。Iterator通過自動完成大多數細節,如提供所需的 typedef,簡化了這件工作。Iterator還可以改編已有的迭代器型別以賦於它新的行為。例如,間接迭代器介面卡增加了一個額外的解引用操作,可以把一個包含某種物件的指標(或智慧指標)的容器變成象一個包含該物件的容器。
Boost.MultiArray
MultiArray提供了一個多維容器,它很象標準庫的容器,但比向量的向量更有效、更高效,更直接。容器的維數在宣告時指定,但它支援限制(slicing)和映身(projecting)不同的檢視(view),也可以在執行期改變維數。
Boost.Multi-index
Multi-index為底層的容器提供多個索引。這意味著一個底層的容器可以有不同的排序方法和不同的訪問語義。當std::set 和 std::map不夠用時,就可以用Boost.Multi-index,通常是在需要為查詢元素而維護多個索引時。
Boost.Range
這個庫是一組關於範圍的概念和工具。比起在演算法中使用一對迭代器來指定範圍,使用ranges更簡單,並提升了使用者程式碼的抽象水平。
Boost.Tuple
在標準C++中有Pairs(類模板 std::pair), 但它不支援n-tuples。用Tuple.不象用structs 或 classes 來定義n-tuples, 這個類模板支援直接宣告和使用,如函式返回型別或引數,並提供一個泛型的方法來訪問tuple的元素。關於這個庫的詳細資訊,請見"Library 8: Tuple 8"。Tuple已經被即將釋出的Library Technical Report所接受。
Boost.Variant
Variant庫包含一個不同於union的泛型類,用於在儲存和操作來自於不同型別的物件。這個庫的一個特點是支援型別安全的訪問,減少了不同資料型別的型別轉換程式碼的共同問題。
函式物件及高階程式設計
Boost.Bind
Bind是對標準庫的繫結器bind1st 和 bind2nd的泛化。這個庫支援使用統一的語法將引數繫結到任何類似於函式行為的東西,如函式指標、函式物件,以及成員函式指標。它還可以通過巢狀繫結器實現函式組合。這個庫不要求那些對標準庫繫結器的強制約束,最顯著的就是不要求你的類提供typedefs result_type, first_argument_type, 和 second_argument_type 等。這個庫也使得我們不再需要用 ptr_fun, mem_fun, 和 mem_fun_ref 等介面卡。Bind庫的說明在"Library 9: Bind 9."。它是對C++標準庫的一個重要且很有用的擴充。Bind可以被標準庫的演算法使用,也經常用於Boost的函式,它提供了一個強大的工具,用於存放後續呼叫的函式和函式物件。Bind 已被即將釋出的Library Technical Report所接受。
Boost.Function
Function庫實現了一個泛型的回撥機制。它提供了函式指標、函式物件和成員函式指標的儲存和後續的呼叫。當然,它與binder庫,如Boost.Bind 和 Boost.Lambda一起工作,大大提高了回撥(包括帶態度的回撥函式)的使用機會。這個庫的詳細介紹請見"Library 11: Function 11."。Function常用於需要把函式指標用於回撥的地方。例如:訊號/接收者的實現,GUI與業務邏輯的分離,以及在標準庫容器中儲存不同的類函式型別。Function已被即將釋出的Library Technical Report所接受。
Boost.Functional
Functional庫提供C++標準庫的介面卡的加強版。主要的優勢是它有助於解決引用到引用(這是非法的)的問題,這個問題是由對帶有一個或多個引用引數的函式使用標準庫的繫結器所引起的。Functional同時消除了在標準庫演算法中使用函式指標時必須用ptr_fun的問題。
Boost.Lambda
Lambda為C++提供lambda表示式及無名函式。在使用標準庫演算法時特別好用,Lambda允許函式在呼叫點建立,避免了建立多個小的函式物件。使用lambdas意味著更少的程式碼,在哪需要就在哪寫,這比分散在程式碼各處的函式物件更清晰、更好維護。"Library 10: Lambda 10" 詳細討論了這個庫。
Boost.Ref
許多函式模板,包括大量標準C++庫裡的函式模板,它們的引數採用傳值的方式傳遞,有時候會有問題。複製一個物件可能很昂貴或者甚至不可能,或者狀態可能取決於特寫的例項,因此這時複製是不希望的。在這些情況下,可用的辦法是用引用傳遞取代值傳遞。 Ref包裝了一個物件的引用,並把它放入一個物件以便被複制。這就允許了通過引用去呼叫那些採用傳值引數的函式。Ref 已被即將釋出的Library Technical Report所接受。
Boost.Signals
訊號和接收系統,基於稱為publisher-subscriber 和 observer的模式,它是在一個最小相關性系統中管理事件的重要工具。很少有大型應用軟體不採用這種強大設計模式的某種變形,儘管他們有各自的實現方式。Signals提供了一個已驗證的、高效的手段,將訊號(events/subjects)的發生和這些訊號要通知的接收者(subscribers/observers)進行了分離。
泛型程式設計與模板超程式設計
Boost.Call_traits
這個庫提供了傳遞引數給函式的最好方法的自動演繹,依據引數的型別。例如,當傳遞的是如int 和 double這樣的內建型別,最高效的方式是傳值。對於使用者自定義型別,則傳送const引用通常更好。Call_traits為你自動選擇正確的引數型別。這個庫還有助於宣告引數為引用,而不用冒引用到引用的風險(在C++這是非法的)。Call_traits常用於要求以最高效方式傳遞引數而又不知道引數型別的泛型函式,並避免引用到引用的問題。
Boost.Concept_check
Concept_check提供一些類模板,用於測試特定的概念(需求的集合)。泛型(引數化的)程式碼要求例項化時的型別必須符合某些抽象概念,如LessThanComparable. 這個庫提供了一些方法來明確地宣告模板的引數化型別的特定需求。程式碼的使用者可以獲益,由於需求的文件化以及編譯器可以產生錯誤資訊以明確指出型別不符合這些概念的地方。Boost.Concept_check提供了超過30個可用於泛型程式碼的概念,其中一些原型可用於校驗包括所有相關概念的元件的實現。它用於在泛型程式碼中宣告和證明概念的需求。
Boost.Enable_if
Enable_if允許函式模板或類模板的特化體包括/排除在一組匹配的函式或特化體之中/之外。主要的用例是包括/排除基於某些特性的特化體。例如,僅當採用一個整數型別例項化時使能一個函式模板。這個庫還為SFINAE(substitution failure is not an error)提供了一個非常有用的研究機會。
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提供對名字空間、類、函式作用域的靜態斷言的支援。詳細資訊見"Library 3: Utility."
Static_assert 的作者是 Dr. John Maddock.
Boost.Type_traits
成功的泛型程式設計通常需要根據引數化型別進行決策或調整這些型別的屬性(如cv-qualification[2])。Type_traits提供關於型別的編譯期資訊,如某個型別是否指標或引用,以及增加或去除型別基本屬性。Type_traits已被加入即將釋出的Library Technical Report。
[2] 一個型別可以是cv-unqualified (非 const 或 volatile), const-qualified (const), volatile-qualified (宣告為 volatile), or volatile-const-qualified (既 const 並 volatile); 型別的這些版本都是獨特的。
Type_traits 的作者是 Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant, Jesse Jones, Mat Marcus, John Maddock, 和 Jeremy Siek, 以及其它許多人的貢獻。
數學及數字處理
Boost.Integer
這個庫提供了對整數型別的有用功能,如編譯期的最小、最大值常數[3],基於給定位長的合適大小的型別,靜態二進位制對數計算等等。還包括從1999年C標準標頭檔案<stdint.h>中的typedef。
[3] std::numeric_limits 僅能以函式方式提供這些值。
Integer 的作者是 Beman Dawes 和 Daryle Walker.
Boost.Interval
Interval庫幫助你使用數學區間。它提供類模板interval及相關運算元。區間的常見用法(除了明顯的進行區間計算的情況)是提供模糊結果的計算;區間的使用可以量化舍入誤差的傳播情況。
Interval 的作者是 Guillaume Melquiond, Sylvain Pion, 和 Hervé Brönniman, 該庫從 Jens Maurer的前期工作獲得靈感。
Boost.Math
Math是一組數學模板:quaternions 和 octonions (複數的特化);數學函式如acosh, asinh, 和 sinhc;計算最大公約數(GCD)和最小公倍數(LCM)的函式等等。
Math 的作者是 Hubert Holin, Daryle Walker, 和 Eric Ford.
Boost.Minmax
Minmax可以同時計算最小和最大值,而使用std::min 和 std::max則要兩次比較。對於n個元素的情況,只要3n/2+1次比較,而使用std::min_element 和 std::max_element則需要2n次比較。
Minmax 的作者是 Hervé Brönniman.
Boost.Numeric Conversion
Numeric Conversion庫是一組用於在不同數字型別的值之間進行安全及可預言的轉換的工具。例如,有一個名為numeric_cast (最早來自於Boost.Conversion)的工具,提供了範圍檢測的轉換以確定數值可被目標型別所表示,否則它會丟擲異常。
Numeric Conversion 的作者是 Fernando Cacciola.
Boost.Operators
Operators庫提供了相關操作符及概念(LessThanComparable, Arithmetic,等等)的實現。定義一個型別的操作符時,保證所有操作符都有定義是一件乏味並容易出錯的工作。例如,你提供了operator< (LessThanComparable),通常都要同時提供operator<=, operator>, 和 operator>= 。Operators可以根據給定型別的最小的使用者自定義操作符集合,自動宣告並定義其它所有的相關操作符。詳細討論見"Library 4: Operators 4."
Operators 的作者是 David Abrahams, Jeremy Siek, Aleksey Gurtovoy, Beman Dawes, 和 Daryle Walker.
Boost.Random
這是一個對隨機數的專業使用的庫,包括大量的生成器和分配器,可適用於多個不同的領域,如模擬和加密。Random已被收入即將釋出的Library Technical Report.
Random 的作者是 Jens Maurer.
Boost.Rational
整數型別和浮點數型別都內建成於C++語言,複數型別也是C++標準庫的一部分,但有理數型別呢?有理數可以避免浮點數的精度損失問題,因此它們常被用於計算金錢等。Rational提供的有理數型別可以基於任意整數型別,包括使用者自定義的整數型別(具有無限精度的型別顯然是很有用的).
Rational 的作者是 Paul Moore.
Boost.uBLAS
uBLAS庫使用數學符號提供對向量和矩陣的基本線性代數操作,採用操作符過載,它可以生成緊湊的程式碼(使用表示式模板)。
uBLAS 的作者是 Joerg Walter 和 Mathias Koch.
輸入/輸出
Boost.Assign
Assign幫助你把一系列的值賦給容器。它通過對operator, (逗號操作符) and operator()() (函式呼叫操作符)的過載,帶給使用者一種資料賦值的很容易的方法。除了對原型風格的程式碼特別有用,這個庫的功能在其它時候也很有用,使用這個庫有助於提高程式碼的可讀性。使用本庫中的list_of還可以就地生成無名陣列。
Assign 的作者是 Thorsten Ottosen.
Boost.Filesystem
Filesystem庫提供對路徑、目錄和檔案操作的可移植性。這種高階抽象使C++程式設計師可以寫出類似於其它程式語言指令碼的程式碼。它提供了便於操作目錄和檔案的演算法。編寫要在不同檔案系統平臺間移植程式碼的困難工作由於這個庫的幫助變得容易了。
Filesystem 的作者是 Beman Dawes.
Boost.Format
這個library加入了按格式化串進行格式化的功能,類似於printf, 但增加了型別安全性。相反使用具有相同便利性的printf的最主要問題是引數型別的危險;它不保證格式化串中指定的型別與實際的引數型別是匹配的。除了消除了這種不匹配性的危險以外,Format還可以用於格式化使用者自定義的型別。[4]
[4] 格式化函式用省略號表示可變數量的引數是不可以的。
Format 的作者是 Samuel Krempp.
Boost.Io_state_savers
Io_state_savers庫允許儲存IOStream物件的狀態,用於以後的恢復,以取消可能發生的任何狀態的變化。許多操縱器會永久改變它們操作的流的狀態,這可能是你不想要的,而手工重置狀態又容易出錯。這個狀態儲存器可以儲存控制標誌、精度、寬度、異常掩碼、流的locale等等。
Io_state_savers 的作者是 Daryle Walker.
Boost.Serialization
這個庫允許任意的C++資料結構存進來,再取出去,以及存檔。例如,存檔可以是文字檔案或XML檔案。Boost.Serialization是高度可移植的,並提供了非常成熟的特性,如類的版本、C++標準庫中的通用類的序列化、共享資料的序列化,等等。
Serialization 的作者是 Robert Ramey.
雜項
Boost.Conversion
Conversion庫包含有一些函式,它們是現有的強制型別轉換操作符(static_cast, const_cast, 和 dynamic_cast)的增強。Conversion為安全的多型轉換增加了 polymorphic_cast 和 polymorphic_downcast,為安全的數字型別轉換增加了 numeric_cast,為文字轉換(如string 和 double間的轉換)增加 lexical_cast。你可為了你自己的型別更好地工作而定製這些型別轉換,可能這些型別並不可以使用語言本身所提供的型別轉換。這個庫的詳細討論在"Library 2: Conversion."
Conversion 的作者是 Dave Abrahams 和 Kevlin Henney.
Boost.Crc
Crc庫提供了迴圈冗餘碼(CRC)的計算,常有於校驗和型別。CRC被加到一個數據流中(它就是從這些資料中計算得來的),用來對這些資料進行校驗,例如PKZip就使用了CRC32。這個庫包含了四個CRC型別:crc_16_type, crc_ccitt_type, crc_xmodem_type, 和 crc_32_type5.
Crc 的作者是 Daryle Walker.
Boost.Date_time
Date_time庫提供了對日期和時間型別及對它們的操作的廣泛支援。如果沒有對日期和時間的支援,程式開發任務會變得複雜並容易出錯。使用Date_time,你想要的所有自然概念都被支援:日、周、月、持續時間(及時間間隔)、加、減等等。這個庫還提供了其它日期/時間庫所忽略的東西,如閏秒處理以及高精度時間源的支援。這個庫的設計是可擴充套件的,允許客戶化定製行為或新增功能。
Date_time 的作者是 Jeff Garland.
Boost.Optional
要求函式可以指出它的返回值無效是一個很普通的要求,但通常返回型別並不存在某個狀態來表示其無效。Optional提供了類模板optional, 它是一個在語義上有額外狀態的型別,它可以有效地表明optional的例項是否包含被封裝物件例項。
Optional 的作者是 Fernando Cacciola.
Boost.Pool
Pool庫提供了一個記憶體池分配器,它是一個工具,用於管理在一個獨立的、大的分配空間裡的動態記憶體。當你需要分配和回收許多不的物件或需要更高效的記憶體控制時,使用記憶體池是一個好的解決方案。
Pool 的作者是 Steve Cleary.
Boost.Preprocessor
當你要表示象迴圈這樣的結構時,很難使用前處理器,它沒有容器,不提供迭代器,等等。然而前處理器仍是一個強大的可移植的工具。Preprocessor庫提供了在前處理器之上的抽象。它包括lists, tuples, 和 arrays, 還有操作這些型別的algorithms。這個庫有助於減少重複的程式碼,減輕你的負擔,也使得程式碼更易讀、更清晰、更具可維護性。
Preprocessor 的作者是 Vesa Karvonen 和 Paul Mensonides.
Boost.Program_options
Program_options庫提供了程式選項配置(名字/值對), 程式選項通常是通過命令列引數或配置檔案提供。這個庫減輕了程式設計師手工分析這些資料的負擔。
Program_options 的作者是 Vladimir Prus.
Boost.Python
Python庫提供了C++與Python[6]的互操作性。它用於將C++類及函式提供給Python,同樣把Python物件給C++。它是非插入式的,也就是說已有程式碼無需修改即可用於Python。
[6] 一種你應該知道的非常流行的程式語言。
Python 的作者是 David Abrahams, 並得到Joel de Guzman 和 Ralf W. Grosse-Kunstleve的重要貢獻。
Boost.Smart_ptr
智慧指標是任何一個程式設計師工具包中的重要部分。它們用於防止資源洩漏、共享資源、物件生存期管理。有很多好的智慧指標庫可用,有些是免費的,而有些是商業軟體包的組成部分。Smart_ptr是其中的佼佼者,已被成千上萬的使用者所證實,並被該領域的專家所推薦。 Smart_ptr包括了非插入的智慧指標用於限制範圍(scoped_ptr 和 scoped_array),用於共享資源(shared_ptr 和 shared_array), 一個配合shared_ptr使用的智慧指標(weak_ptr), 還有一個插入式的智慧指標類(intrusive_ptr). Smart_ptr的shared_ptr (包括它的助手enable_shared_from_this) 以及 weak_ptr 已被收入即將釋出的Library Technical Report。關於智慧指標更詳細的說明請見"Library 1: Smart_ptr 1."
Smart_ptr 的作者是 Greg Colvin, Beman Dawes, Peter Dimov, 和 Darin Adler.
Boost.Test
Test庫提供了一整組用於編寫測試程式的元件,可以把測試組織成簡單的測試用例及測試套裝,並控制它們的執行。作為這個庫的一個元件,程式執行監視器在某些生產(非測試)環境下也很有用。
Test 的作者是 Gennadiy Rozental (基於Beman Dawes早期的工作).
Boost.Thread
可移植的執行緒是很難處理的業務,也無法從C++本身獲取幫助,因為語言本身不包括執行緒支援。當然,我們有POSIX, 它在許多平臺上可用,但POSIX使用的是C API。Thread是一個提供可移植執行緒的庫,它包含大量執行緒的原始概念和高度抽象。
Thread 的作者是 William Kempf.
Boost.Timer
Timer庫包含計時所需的特性,它的目標是儘可能做到跨平臺的一致性。雖然每個平臺都有特定的 API可以讓程式設計師用於計時,但對於高精度計時還沒有可移植的方案。Boost.Timer通過提供最大可能的精度並同時保留可移植性解決了這個問題,從而可以讓你自由地確定精度。
Timer 的作者是 Beman Dawes.
Boost.Tribool
這個庫包含一個 tribool 庫,它實現了三狀態布林邏輯。三狀態布林型別除了true 和 false以外還有一個額外的狀態:indeterminate (這個狀態也被稱為maybe; 這個名字是可配置的).
Tribool 的作者是 Douglas Gregor.
Boost.Utility
一些本不應在一個庫裡出現的有用的東西,只是因為它們每個都不太複雜和廣泛,不足夠形成一個單獨的庫。但不是說它們沒有什麼用外;事實上小的工具通常都有最廣泛的用處。在Boost, 這些小工具被集中起來,形成一個稱為Utility的庫。你可以在這找到checked_delete, 一個函式,用於確認在刪除點的型別是完整的;還有類noncopyable,用於確保類不能被複制;還有enable_if,用於對函式過載的完全控制。還有其它很多工具,詳細請見"Library 3: Utility"。
Utility 的作者是 David Abrahams, Daryle Walker, Douglas Gregor, 和其它人。
Boost.Value_initialized
Value_initialized庫幫助你用泛型的方法構造和初始化物件。在C++裡,一個新構造的物件可以是零初始化的、預設構造的,或是不確定的,這依賴於物件的型別。有了Boost.Value_initialized, 這種不一致的問題就沒有了。