Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ 程式碼規範

Boost 函式庫文件

依類別

字串和文字處理

  • CharConv:C++11 中 <charconv> 的實作。
  • Convert:可擴展且可配置的類型轉換框架。
  • Format:Format 函式庫提供了一種類型安全機制,用於根據類似 printf 的格式字串來格式化參數。
  • Iostreams:Boost.IOStreams 提供了一個用於定義資料流、資料流緩衝區和 I/O 過濾器的框架。
  • Lexical Cast:泛型文字轉換,例如將 int 表示為字串,或反之亦然。
  • Locale:為 C++ 提供本地化和 Unicode 處理工具。
  • Regex:正規表示式函式庫。
  • Spirit:LL 解析器框架,將解析器直接表示為內嵌 C++ 中的 EBNF 語法。
  • Spirit Classic:LL 解析器框架,將解析器直接表示為內嵌 C++ 中的 EBNF 語法。
  • Spirit Repository:Spirit 儲存庫是一個社群專案,收集了用於 Qi 解析器和 Karma 產生器的各種可重複使用的元件(基本元素、指令、語法等)。
  • Static String:固定容量的動態大小字串。
  • String Algo:字串演算法函式庫。
  • String View:字串檢視範本。
  • Tokenizer:將字串或其他字元序列分解成一系列標記。
  • Wave:Boost.Wave 函式庫是一個符合標準且高度可配置的 C99/C++ 預處理器功能實作,其背後是一個易於使用的迭代器介面。
  • Xpressive:正規表示式可以寫成字串或表示式範本,並且可以互相遞歸地引用,具有上下文無關語法的功能。

容器

  • Array:符合 STL 標準的固定大小陣列的容器包裝器。
  • Bimap:C++ 的雙向映射函式庫。使用 Boost.Bimap,您可以建立兩種類型都可以用作鍵值的關聯式容器。
  • Circular Buffer:一種符合 STL 標準的容器,也稱為環狀緩衝區或循環緩衝區。
  • Container:標準函式庫容器和擴充功能。
  • Dynamic Bitset:dynamic_bitset 類別表示一個位元集合。它透過 operator[] 提供對個別位元值的存取,並提供所有可以應用於內建整數的位元運算子,例如 operator& 和 operator<<。集合中的位元數是在執行時期透過 dynamic_bitset 建構函式的參數指定的。
  • GIL:(C++14) 泛型影像函式庫
  • Graph:BGL 圖形介面和圖形元件是泛型的,與標準樣板函式庫 (STL) 的意義相同。
  • GraphParallel:PBGL 圖形介面和圖形元件是泛型的,與標準樣板函式庫 (STL) 的意義相同。
  • ICL:區間容器函式庫,區間集合和映射以及相關值的聚合。
  • 侵入式容器: 侵入式容器和演算法。
  • JSON: C++11 的 JSON 解析、序列化和 DOM。
  • 多維陣列: Boost.MultiArray 提供一個通用的 N 維陣列概念定義和該介面的常見實作。
  • 多重索引: Boost 多重索引容器庫提供了一個名為 multi_index_container 的類別模板,它可以建構容器,並維護一個或多個具有不同排序和存取語義的索引。
  • 指標容器: 用於儲存堆積配置的多型物件的容器,以簡化物件導向程式設計。
  • 多型集合: 快速的多型物件容器。
  • 屬性映射: 定義將鍵物件映射到值物件的介面概念。
  • 屬性映射(平行): 屬性映射的平行擴展,用於平行圖形。
  • 屬性樹: 一種特別適合儲存配置資料的樹狀資料結構。
  • 字串參考: 字串視圖模板。
  • String View:字串檢視範本。
  • 無序: 無序關聯式容器。
  • URL: C++11 的 URL 解析。
  • 變體: 安全、通用、基於堆疊的具識別聯集容器。
  • 變體2: 一個永不無值、強保證的 std::variant 實作。

迭代器

  • GIL:(C++14) 泛型影像函式庫
  • Graph:BGL 圖形介面和圖形元件是泛型的,與標準樣板函式庫 (STL) 的意義相同。
  • GraphParallel:PBGL 圖形介面和圖形元件是泛型的,與標準樣板函式庫 (STL) 的意義相同。
  • 迭代器: Boost 迭代器庫包含兩個部分。第一部分是一個概念系統,它擴展了 C++ 標準迭代器的要求。第二部分是一個基於這些擴展概念建構迭代器的元件框架,並包含幾個有用的迭代器配接器。
  • 運算子: 簡化算術類別和迭代器中運算子定義的模板。
  • Tokenizer:將字串或其他字元序列分解成一系列標記。

演算法

  • 演算法: 一組有用的泛型演算法。
  • Foreach: 在 C++ 中,撰寫迭代序列的迴圈很繁瑣。我們可以使用迭代器,這需要大量的樣板程式碼,或者我們可以使用 std::for_each() 演算法,並將我們的迴圈主體移到一個述詞中,這需要的樣板程式碼並不少,而且迫使我們將邏輯移到遠離使用位置的地方。相比之下,其他一些語言,例如 Perl,提供了一個專用的 "foreach" 建構來自動化這個過程。BOOST_FOREACH 就是 C++ 的這樣一個建構。它為我們迭代序列,使我們不必直接處理迭代器或撰寫述詞。
  • 幾何: Boost.Geometry 庫提供幾何演算法、基本類型和空間索引。
  • GIL:(C++14) 泛型影像函式庫
  • Graph:BGL 圖形介面和圖形元件是泛型的,與標準樣板函式庫 (STL) 的意義相同。
  • GraphParallel:PBGL 圖形介面和圖形元件是泛型的,與標準樣板函式庫 (STL) 的意義相同。
  • 直方圖: 快速的多維直方圖,具有方便的 C++14 介面。
  • 最小-最大值: 標準庫擴展,用於同時計算最小/最大值和最小/最大值元素。
  • 多邊形: 沃羅諾伊圖建構和布林運算/裁剪、調整大小/偏移以及更多針對具有整數座標的平面多邊形的操作。
  • QVM: 用於處理四元數、向量和矩陣的通用 C++ 庫。
  • 範圍: 一個新的泛型演算法基礎架構,它建立在新的迭代器概念之上。
  • 排序: 高效能的模板化排序函式。
  • String Algo:字串演算法函式庫。

函式物件和高階程式設計

泛型程式設計 (Generic Programming)

樣板元程式設計 (Template Metaprogramming)

  • CallableTraits:Boost.FunctionTypes 的精神繼承者,Boost.CallableTraits 是一個僅含標頭檔的 C++11 函式庫,用於編譯時檢查和操作所有「可呼叫」型別。額外支援 C++17 功能。
  • Describe:一個 C++14 反射函式庫。
  • 函式型別 (Function Types):Boost.FunctionTypes 提供了分類、分解和合成函式、函式指標、函式引用和成員指標型別的功能。
  • Fusion:用於處理元組的函式庫,包括各種容器、演算法等。
  • Hana:一個現代 C++ 元程式設計函式庫。它提供用於操作異質序列的高階演算法,允許使用自然語法編寫型別層級計算,提供用於自省使用者自訂型別的工具等等。
  • 高階函式 (HOF):C++ 的高階函式。
  • Metaparse:用於生成編譯時期解析器的函式庫,可在 C++ 編譯過程中解析嵌入式 DSL 程式碼。
  • Mp11:一個 C++11 元程式設計函式庫。
  • MPL:Boost.MPL 函式庫是一個通用的、高階的 C++ 模板元程式設計框架,包含編譯時期演算法、序列和元函式。它提供了一個概念基礎和一組廣泛的強大且一致的工具,使在 C++ 中進行顯式元程式設計在目前的語言環境下盡可能地簡單和愉快。
  • PFR:使用者自訂型別的基本反射功能。
  • Proto:表達式模板函式庫和編譯器建構工具包,用於特定領域的嵌入式語言。
  • 靜態斷言 (Static Assert):靜態斷言(編譯時斷言)。
  • TTI:型別特性自省函式庫。
  • 型別特性 (Type Traits):型別基本屬性的樣板。
  • YAP:適用於 C++14 和更新版本的表達式樣板函式庫。

前置處理器元程式設計

  • Identity Type:將型別用圓括號括起來,以便它們始終可以作為巨集參數傳遞。
  • Preprocessor:前置處理器元程式設計工具,包含重複和遞迴。
  • VMD:可變參數巨集資料函式庫。

並行程式設計

  • Asio:可攜式網路和其他低階 I/O,包含通訊端、計時器、主機名稱解析、通訊端 iostream、序列埠、檔案描述符和 Windows HANDLE。
  • Atomic:C++11 風格的原子型別。
  • Beast:僅使用 C++11 和 Boost.Asio 的可攜式 HTTP、WebSocket 和網路操作函式庫。
  • Cobalt:協程。基本演算法和型別。
  • Compute:平行/GPU 運算函式庫。
  • Context:(C++11) 上下文切換函式庫。
  • Coroutine (已棄用):協程函式庫。
  • Coroutine2:(C++11) 協程函式庫。
  • Fiber:(C++11) 使用者層級執行緒函式庫。
  • Interprocess:共享記憶體、記憶體映射檔案、行程共享互斥鎖、條件變數、容器和配置器。
  • Lockfree:無鎖資料結構。
  • MPI:訊息傳遞介面函式庫,用於分散式記憶體平行應用程式設計。
  • MySQL:基於 Boost.Asio 構建的 MySQL 用戶端函式庫。
  • Redis:基於 Boost.Asio 構建的 Redis 非同步用戶端函式庫。
  • Thread:可攜式 C++ 多執行緒。C++11、C++14、C++17。

數學和數值計算

  • Accumulators:用於增量計算的框架和統計累加器的集合。
  • Endian:不論處理器位元組序為何,皆可正確處理位元組序和其他相關功能的型別和轉換函式。
  • 幾何: Boost.Geometry 庫提供幾何演算法、基本類型和空間索引。
  • 直方圖: 快速的多維直方圖,具有方便的 C++14 介面。
  • Integer:Boost 整數標頭檔和類別的組織旨在利用 1999 C 標準中的 <stdint.h> 型別,而無需在 1998 C++ 標準方面訴諸未定義行為。標頭檔 <boost/cstdint.hpp> 將標準整數型別安全地置於命名空間 boost 中,而不會在命名空間 std 中放置任何名稱。
  • Interval:將常用的算術函式擴展到數學區間。
  • 數學 (Math):Boost.Math 包含數個數學領域的貢獻:浮點數工具、特定寬度浮點數類型、數學常數、統計分佈、特殊函數、求根與函數最小化、多項式和有理函數、插值以及數值積分和微分。許多這些功能都採用模板化,以支援內建類型和擴展寬度類型(例如 Boost.Multiprecision)。
  • 數學公因數 (Math Common Factor):最大公因數和最小公倍數。
  • 數學八元數 (Math Octonion):八元數。
  • 數學四元數 (Math Quaternion):四元數。
  • 數學/特殊函數 (Math/Special Functions):多種數學特殊函數。
  • 數學/統計分佈 (Math/Statistical Distributions):多種單變量統計分佈及其運算函數。
  • 多維陣列: Boost.MultiArray 提供一個通用的 N 維陣列概念定義和該介面的常見實作。
  • 多精度 (Multiprecision):用於浮點數、整數和有理數算術的擴展精度算術類型。
  • 數值轉換 (Numeric Conversion):基於策略的優化數值轉換。
  • 常微分方程求解器 (Odeint):求解常微分方程。
  • 運算子: 簡化算術類別和迭代器中運算子定義的模板。
  • 多邊形: 沃羅諾伊圖建構和布林運算/裁剪、調整大小/偏移以及更多針對具有整數座標的平面多邊形的操作。
  • QVM: 用於處理四元數、向量和矩陣的通用 C++ 庫。
  • 隨機數 (Random):一套完整的隨機數生成系統。
  • 比例 (Ratio):編譯時期有理數算術。C++11。
  • 有理數 (Rational):一個有理數類別。
  • 安全數值 (Safe Numerics):保證正確的整數算術。
  • uBLAS:uBLAS 提供張量、矩陣和向量類別,以及基本的線性代數例程。支援多種密集、壓縮和稀疏儲存方案。

正確性和測試

錯誤處理和恢復

資料結構

  • 任意 (Any):安全、通用的容器,用於儲存不同值類型的單個值。
  • Bimap:C++ 的雙向映射函式庫。使用 Boost.Bimap,您可以建立兩種類型都可以用作鍵值的關聯式容器。
  • 壓縮配對 (Compressed Pair):具有空成員優化的配對類別。
  • Container:標準函式庫容器和擴充功能。
  • Fusion:用於處理元組的函式庫,包括各種容器、演算法等。
  • 幾何: Boost.Geometry 庫提供幾何演算法、基本類型和空間索引。
  • 堆積 (Heap):優先佇列資料結構。
  • 直方圖: 快速的多維直方圖,具有方便的 C++14 介面。
  • ICL:區間容器函式庫,區間集合和映射以及相關值的聚合。
  • JSON: C++11 的 JSON 解析、序列化和 DOM。
  • 多重索引: Boost 多重索引容器庫提供了一個名為 multi_index_container 的類別模板,它可以建構容器,並維護一個或多個具有不同排序和存取語義的索引。
  • 可選值 (Optional):一個值語義、類型安全的包裝器,用於表示給定類型的「可選」(或「可空」)物件。可選值物件可能包含也可能不包含基礎類型的值。
  • PFR:使用者自訂型別的基本反射功能。
  • 指標容器: 用於儲存堆積配置的多型物件的容器,以簡化物件導向程式設計。
  • 多邊形: 沃羅諾伊圖建構和布林運算/裁剪、調整大小/偏移以及更多針對具有整數座標的平面多邊形的操作。
  • 屬性樹: 一種特別適合儲存配置資料的樹狀資料結構。
  • 元組 (Tuple):簡化定義返回多個值的函數等。
  • 類型擦除 (Type Erasure):基於概念的執行時期多型。
  • URL: C++11 的 URL 解析。
  • 通用唯一識別碼 (Uuid):一個通用唯一識別碼。
  • 變體: 安全、通用、基於堆疊的具識別聯集容器。
  • 變體2: 一個永不無值、強保證的 std::variant 實作。

特定領域

影像處理

  • GIL:(C++14) 泛型影像函式庫

輸入/輸出

  • Asio:可攜式網路和其他低階 I/O,包含通訊端、計時器、主機名稱解析、通訊端 iostream、序列埠、檔案描述符和 Windows HANDLE。
  • 賦值 (Assign):用常數或生成的數據填充容器變得前所未有的簡單。
  • Beast:僅使用 C++11 和 Boost.Asio 的可攜式 HTTP、WebSocket 和網路操作函式庫。
  • Endian:不論處理器位元組序為何,皆可正確處理位元組序和其他相關功能的型別和轉換函式。
  • Format:Format 函式庫提供了一種類型安全機制,用於根據類似 printf 的格式字串來格式化參數。
  • 輸入輸出 (IO):標準 I/O 函式庫的工具。
  • Iostreams:Boost.IOStreams 提供了一個用於定義資料流、資料流緩衝區和 I/O 過濾器的框架。
  • JSON: C++11 的 JSON 解析、序列化和 DOM。
  • MySQL:基於 Boost.Asio 構建的 MySQL 用戶端函式庫。
  • 程式選項 (Program Options):程式選項函式庫允許程式開發人員透過傳統方法(例如命令列和設定檔)從使用者取得程式選項,即 (名稱, 值) 對。
  • Redis:基於 Boost.Asio 構建的 Redis 非同步用戶端函式庫。
  • 序列化 (Serialization):用於持久化和編組的序列化。
  • URL: C++11 的 URL 解析。

跨語言支援

  • Python:Boost Python 函式庫是一個用於連接 Python 和 C++ 的框架。它允許您使用 C++ 編譯器快速且無縫地將 C++ 類別、函式和物件公開給 Python,反之亦然,無需任何特殊工具。

語言特性模擬

  • 相容性 (Compat):在較新 C++ 標準中添加的標準組件的 C++11 實作。
  • Describe:一個 C++14 反射函式庫。
  • 例外 (Exception):Boost Exception 函式庫支援在例外物件中傳輸任意資料,以及在執行緒之間傳輸例外。
  • Foreach: 在 C++ 中,撰寫迭代序列的迴圈很繁瑣。我們可以使用迭代器,這需要大量的樣板程式碼,或者我們可以使用 std::for_each() 演算法,並將我們的迴圈主體移到一個述詞中,這需要的樣板程式碼並不少,而且迫使我們將邏輯移到遠離使用位置的地方。相比之下,其他一些語言,例如 Perl,提供了一個專用的 "foreach" 建構來自動化這個過程。BOOST_FOREACH 就是 C++ 的這樣一個建構。它為我們迭代序列,使我們不必直接處理迭代器或撰寫述詞。
  • 移動語義 (Move):適用於 C++03 和 C++11 編譯器的可移植移動語義。
  • 結果 (Outcome):一個確定性錯誤處理函式庫,部分模擬輕量級異常。
  • 參數 (Parameter):Boost.Parameter 函式庫 - 撰寫可按名稱接受參數的函式。
  • 參數 Python 繫結 (Parameter Python Bindings):Boost.Parameter 函式庫的 Python 繫結。
  • 作用域 (Scope):作用域守衛和 unique_resource 包裝器的集合。
  • 作用域退出 (Scope Exit):在作用域退出時執行任意程式碼。
  • 拋出例外 (ThrowException):Boost 函式庫拋出例外的通用基礎架構。
  • 類型索引 (Type Index):執行期/編譯期可複製的類型資訊。
  • 類型推導 (Typeof):Typeof 運算符模擬。

記憶體

解析

  • 解析器 (Parser):一個解析器組合子函式庫。
  • Spirit:LL 解析器框架,將解析器直接表示為內嵌 C++ 中的 EBNF 語法。
  • Spirit Classic:LL 解析器框架,將解析器直接表示為內嵌 C++ 中的 EBNF 語法。
  • Spirit Repository:Spirit 儲存庫是一個社群專案,收集了用於 Qi 解析器和 Karma 產生器的各種可重複使用的元件(基本元素、指令、語法等)。

模式與慣用法

程式設計介面

狀態機

系統

其他

  • CharConv:C++11 中 <charconv> 的實作。
  • 轉換 (Conversion):多型轉換。
  • Convert:可擴展且可配置的類型轉換框架。
  • 核心 (Core):具有最小依賴項的簡單核心工具集合。
  • Endian:不論處理器位元組序為何,皆可正確處理位元組序和其他相關功能的型別和轉換函式。
  • Lexical Cast:泛型文字轉換,例如將 int 表示為字串,或反之亦然。
  • 日誌 (Log):日誌函式庫。
  • 數值轉換 (Numeric Conversion):基於策略的優化數值轉換。
  • 預定義 (Predef):此函式庫根據其可以收集的 C、C++、Objective C 和 Objective C++ 預定義巨集或一般可用標頭檔中定義的資訊,定義一組編譯器、架構、作業系統、函式庫和其他版本號。
  • 程式選項 (Program Options):程式選項函式庫允許程式開發人員透過傳統方法(例如命令列和設定檔)從使用者取得程式選項,即 (名稱, 值) 對。
  • 交換 (Swap):增強的泛型交換函式。
  • 計時器:事件計時器、進度計時器和進度顯示類別。
  • 三態布林值:三態布林值類型函式庫。
  • 工具 (Utility):各種工具,例如 base-from-member 慣用法和 C++03 中的二進位字面值。
  • 值初始化:基於 David Abrahams 的原始構想,用於統一語法值初始化的包裝器。

損壞的編譯器因應措施

  • 相容性:協助不符合標準的標準函式庫。
  • 組態:協助 Boost 函式庫開發人員適應編譯器的特殊性;不適用於函式庫使用者。