Boost库

**Boost C++ 函式庫**（Libraries）是一組擴充 C++ 功能的經過同行評審（Peer-reviewed）且開放原始碼程式庫。大多數的函式為了能夠以開放原始碼或者封閉專案的方式運作，而授權於 Boost 軟體授權條款（Boost Software License）之下。許多 Boost 的開發人員是來自 C++ 標準委員會，而部份的 Boost 函式庫成為 C++ 的 TR1 標準之一。

為了要確保函式庫的效率與彈性，Boost 廣泛的使用模板（template）功能。而它是針對各式領域的 C++ 使用者與應用領域（Application Domain）上，包含的函式庫類別從像 smart\_ptr 函式庫（頁面存檔備份，存於網際網路檔案館）這種類通用函式庫，到像是檔案系統的作業系統抽象層，甚至能夠利用 Boost 來開發額外的函式庫或是給進階的 C++ 使用者利用，像是 MPL（頁面存檔備份，存於網際網路檔案館）。

## 內容

* 演算法
* 平行計算
  * thread（頁面存檔備份，存於網際網路檔案館） - 執行緒
  * context（頁面存檔備份，存於網際網路檔案館） - 使用者層級上下文交換
* 容器
  * array（頁面存檔備份，存於網際網路檔案館） - STL 的陣列容器
  * Boost Graph Library (BGL)（頁面存檔備份，存於網際網路檔案館） - 通用的圖容器，組件和演算法
  * multi-array（頁面存檔備份，存於網際網路檔案館） - N 維陣列
  * multi-index containers（頁面存檔備份，存於網際網路檔案館） - 多索引容器
  * pointer containers（頁面存檔備份，存於網際網路檔案館） - 指標容器
  * property map - 屬性 Map
  * variant（頁面存檔備份，存於網際網路檔案館） - 安全的，基於泛型的，支援存取者模式的聯合
  * fusion（頁面存檔備份，存於網際網路檔案館） - 基於 tuple 的容器和演算法集合
* 正當性與測試
  * concept check（頁面存檔備份，存於網際網路檔案館） - 檢查模板參數是否滿足模板的要求
  * static assert（頁面存檔備份，存於網際網路檔案館） - 編譯期的斷言檢查
  * Boost Test Library - C++ 單元測試框架
* 資料結構
  * dynamic\_bitset（頁面存檔備份，存於網際網路檔案館） - `std::bitset-` 的動態轉型
* 仿函式與高階函式（含無名関數）
  * bind（頁面存檔備份，存於網際網路檔案館） and mem\_fn（頁面存檔備份，存於網際網路檔案館） - 函式的綁定
  * function（頁面存檔備份，存於網際網路檔案館） - 函式。
  * functional（頁面存檔備份，存於網際網路檔案館） - C++ 標準函式之強化。包含以下的內容。
    * function object traits（頁面存檔備份，存於網際網路檔案館）
    * negators（頁面存檔備份，存於網際網路檔案館）
    * binders（頁面存檔備份，存於網際網路檔案館）
    * adapters for pointers to functions（頁面存檔備份，存於網際網路檔案館）
    * adapters for pointers to member functions（頁面存檔備份，存於網際網路檔案館）
  * hash（頁面存檔備份，存於網際網路檔案館） - C++ Technical Report 1（TR1）定義的雜湊表
  * lambda（頁面存檔備份，存於網際網路檔案館） - λ 演算的實作
  * ref（頁面存檔備份，存於網際網路檔案館） - 標準 C++ 參照（call by reference）的加強、特別強化與函式的呼叫
  * result\_of（頁面存檔備份，存於網際網路檔案館） - 函式型別與回傳值
  * signals2（頁面存檔備份，存於網際網路檔案館） - 訊號和槽回呼的實現代管
* 泛型
* 圖
* I/O
* 語言之間的支援（Python 用）
* 迭代器
  * iterators（頁面存檔備份，存於網際網路檔案館）
  * operators（頁面存檔備份，存於網際網路檔案館）
  * tokenizer（頁面存檔備份，存於網際網路檔案館）
* 數學和計算
* 記憶體（memory）
  * pool（頁面存檔備份，存於網際網路檔案館） - 記憶體池，boost 提供 4 種記憶體池模型供使用：pool、object\_pool、singleton\_pool、pool\_allocator/fast\_pool\_allocator
  * smart\_ptr（頁面存檔備份，存於網際網路檔案館） - boost 的 smart\_ptr 中提供了 4 種智慧型指標，作為 std::auto\_ptr 的補充
    * scoped\_ptr - 具作用域指標，與 std::auto\_ptr 類似，但不能轉讓所有權，用於確保離開作用域能夠正確地刪除動態分配的物件
    * scoped\_array - 配合 scoped\_ptr 使用
    * shared\_ptr -
    * shared\_array - 配合 shared\_ptr 使用
    * weak\_ptr - shared\_ptr 的觀察者，避免 shared\_ptr 迴圈參照，是一種輔助指標
    * intrusive\_ptr - 比 shared\_ptr 更好的智慧型指標
  * utility（頁面存檔備份，存於網際網路檔案館） - 以下是 utility 類型的定義。
    * base from member idiom -
    * checked delete（頁面存檔備份，存於網際網路檔案館） - 保證在摧毀一個物件時，必須對該物件的類型有充份了解
    * next and prior functions（頁面存檔備份，存於網際網路檔案館） -
    * noncopyable（頁面存檔備份，存於網際網路檔案館） - 把 copy constructor 和 assign operaotr 宣告為 private，不加以實現
    * addressof（頁面存檔備份，存於網際網路檔案館） - 用於獲得變數的位址
    * result\_of（頁面存檔備份，存於網際網路檔案館） - 指涉函式回返型別
* 序列化
* 語法剖析器
* 預處理元程式設計
* 字串與文字處理（正規表示式等）
  * lexical\_cast - lexical\_cast 類別模板
  * format（頁面存檔備份，存於網際網路檔案館） - 文字格式化，類似 printf
  * iostreams（頁面存檔備份，存於網際網路檔案館） - 新式 iostream 的補強
  * regex - 正規表示法（Regular expression）
  * Spirit - 根據 EBNF 規則對檔案進行分析
  * string algorithms（頁面存檔備份，存於網際網路檔案館） - 文字列演算法
  * tokenizer（頁面存檔備份，存於網際網路檔案館） - 把字串序列分解成一系列標記（tokens）
  * wave（頁面存檔備份，存於網際網路檔案館） -
* 模板元程式設計（Template Metaprogramming）
  * mpl（頁面存檔備份，存於網際網路檔案館） - 模板元程式設計框架
  * static assert（頁面存檔備份，存於網際網路檔案館） - 靜態斷言
  * type traits - 型別的基本屬性的模板
* 其他

## 範例

現有的 Boost 包含大約 150 種不同的函式庫，以下面幾項做範例：

### 線性代數 – uBLAS

Boost 包含了 **uBLAS** 線性代數函式庫，能夠藉由基本函式庫子函式（BLAS）來支持向量與矩陣形運算。

* 此範例表示如何矩陣與向量作乘積：

### 亂數產生 – Boost.Random

Boost 也提供獨立分布的類比隨機與 PRNG 獨立性的機率分布，而這些能夠具體的建立產生器。

* 此範例表示如何使用 Mersenne Twister 演算法來產生隨機

更詳細的說明請參閱 Boost 亂數庫（頁面存檔備份，存於網際網路檔案館）。

### 多執行緒 – Boost.Thread

範例碼演示建立執行緒：

* Introduction to Boost.Threads（頁面存檔備份，存於網際網路檔案館） in Dr. Dobb's Journal. (2002)
* Boost.Threads API reference（頁面存檔備份，存於網際網路檔案館）。
* threadpool library（頁面存檔備份，存於網際網路檔案館） based on Boost.Thread

## 參照

## 外部連結

* Boost 官方網站（頁面存檔備份，存於網際網路檔案館）
* Smart Pointers to boost your code
* Building Boost libraries（頁面存檔備份，存於網際網路檔案館）
* Boost 中文翻譯（頁面存檔備份，存於網際網路檔案館） 線上閱讀