簡介:實用工具類開發(fā)和維護(hù)會耗費程序員的時間。Boost 通過提供幾個高質(zhì)量的庫,從而簡化了此 過程,您可以將這些庫輕松集成到現(xiàn)有的代碼庫中。本文簡單概述一些較流行的 Boost 實用工具類,并 幫助您了解如何將它們投入使用。
實用工具類(utility classes)在幾乎任何適當(dāng)規(guī)模的 C++ 項目中都是必需的,但是不存在滿足此 需求的標(biāo)準(zhǔn)方法。通常,團(tuán)隊根據(jù)他們的需求編寫實用工具類代碼,但是由于缺少重要的接口信息,使得 相同組織中的其他項目團(tuán)隊無法重用那些類。建議的標(biāo)準(zhǔn)模板庫(Standard Template Library,STL)只 具有諸如 hash、stack 和 vector 等少數(shù)基本類,因此無法有效地用于取代遺留實用工具庫。
本文將介紹幾個 Boost 實用工具類,包括 tuple、static_assert、pool、random 和 program_options。您需要對標(biāo)準(zhǔn) STL 具備一定的了解才能充分理解本文的內(nèi)容。本文中的所有代碼都已 使用 Boostb 1.35 來進(jìn)行了測試并使用 gcc-3.4.4 來進(jìn)行了編譯。
boost::tuple 類
有時,您希望 C++ 函數(shù)返回多個不相關(guān)的值。在推出 STL 之前,實現(xiàn)此目的的方法是創(chuàng)建所有不相 關(guān)變量的結(jié)構(gòu),并以指針或引用的形式返回它們或作為參數(shù)傳遞給函數(shù)——但是任一種方法都不是表達(dá)程 序員意圖的方法。STL 引入了 pair,可將其用于聚合不相關(guān)的數(shù)據(jù)部分,但它一次只能處理兩個數(shù)據(jù)對 象。為了使用 int、char 和 float 的元組(tuple ),您可以按如下方式返回 pair:
make_pair<int, pair<char, float> > (3, make_pair<char, float> ('a', 0.9));
隨著您添加更多的元素,創(chuàng)建元組結(jié)構(gòu)將變得越來越困難。Boost tuple 類型派上了用場。要使用 boost::tuple,您必須包括頭文件 tuple.hpp。要執(zhí)行元組比較和元組 I/O,您需要分別包括 tuple_comparison.hpp 和 tuple_io.hpp。
第一個使用元組的程序
清單 1 使用 int、char 和 float 的元組并打印內(nèi)容。
清單 1. 創(chuàng)建 Boost 元組并打印內(nèi)容
#include <iostream>
#include <tuple.hpp>
#include <tuple_comparison.hpp>
#include <tuple_io.hpp>
using namespace boost;
int main ( )
{
tuple<int, char, float> t(2, 'a', 0.9);
std::cout << t << std::endl;
return 0;
}
此代碼的輸出為 (2 a 0.9)。請注意,<< 運算符重載 std::ostream,以便通過轉(zhuǎn)儲每個單獨 的 tuple 元素來輸出元組。