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