1. 程式人生 > >Item 55:熟悉一下Boost

Item 55:熟悉一下Boost

Item 55: Familiarize yourself with Boost.

Boost是一個C++開發者的社群,作為C++標準的試驗場, 收容了很多高質量、開源的、跨平臺、獨立於編譯器的C++庫, 包括許多TR1元件的實現。

Boost是其他C++組織和社群所不能比擬的:

  • 與C++標準委員會的親近關係。Boost社群成員和C++標準委員會成員有很大的交集。 多數C++下一代標準都來自於Boost社群。
  • 特殊的專案接收流程。首先在郵件列表中提出它,然後開啟整個流程: 討論、優化、重新提交,直到滿意。

Boost社群中的庫千差萬別,較小的庫(比如Convention)除了錯誤處理和跨平臺外只有幾行程式碼; 較大的庫(比如Boost Graph Library、Boost MPL Library

) 卻需要整本的書來寫它們。這些庫可以分為以下幾個大的類別:

  • 字串和文字處理。型別安全的printf、正則表示式、 分詞(tokenizing)、轉換(parsing)。
  • 容器。STL風格的固定大小陣列、可變大小的Bitset、多維陣列。
  • 函式物件和高階程式設計。比如有趣的Lambda庫:
using namespace boost::lambda;
  std::vector<int> v;
  std::for_each(v.begin(), v.end(), std::cout<< _1 * 2 + 10 << "\n");
_1 是 Lambda 庫的佔位符,表示當前元素
  • 泛型程式設計。包括一套可擴充套件的traits類,見Item 47
  • 模板超程式設計(TMP,見Item 48)。
  • 數值計算。包括有理數、八元數、最大公約數、最小公倍數等。
  • 正確性和測試。隱式模板介面的形式化和測試驅動程式設計。
  • 資料結構。包括型別安全的聯合體、元組。
  • 跨語言支援。比如C++和Python提供無縫互操作性的庫。
  • 記憶體。如固定大小記憶體池的分配器。
  • 雜項。CRC檢查、時間日期操作、檔案系統遍歷等。

也有一些程式設計領域的東西並不在Boost裡面, 比如GUI開發、資料庫連線等。