boost庫的使用 tuple

2021-12-29 20:48:08 字數 2354 閱讀 3189

tuple的使用

一 boost::tuple

很多的時候我們經常需要為我們的函式返回多個值,一般的做法是通過傳入非常量的指標或引用,但是這樣的話可能可讀性就要差一些,使用者可能需要確切的文件才能確定到底哪個是返回值,為了更好的可讀性,我們可以使用class或struct來封裝我們要返回的多個值,然後返回封裝struct或class,但是使用這種方法的弊端就是增加的程式的**量,最好的解決辦法其實我們可以通過一種匿名的struct或class來解決這個問題。

boost::tuple就為我們提供了一種類似於匿名struct的方法為我們解決函式的多個返回值的問題。既增強了**的可讀性有不增加**量。其實在stl中已經有這樣的特例,std::pair其實就是boost::tuple的2個引數的特例,對boost::tuple你可以繫結更多的引數,或者你可以迭代實現無限多引數的情況。

二 原始碼剖析

標頭檔案: "boost/tuple/tuple.hpp",它包含了 tuple 類模板及庫的核心部分。

標頭檔案: "boost/tuple/tuple_io.hpp",包含了對 tuple 的輸入輸出操作符。

標頭檔案: "boost/tuple/tuple_comparison.hpp",包含了 tuple 的關係操作符。

為了方便使用,tuple 庫中有些名字位於名字空間 boost:如 tuple, make_tuple, tie, 和 get.

函式說明:

1)建構函式

2)拷貝建構函式

3)t.get()或get(t) ,取得第n個值

4)make_tuple ,生成tuple

5)tie , 生成都是ref的tuple

6) 過載比較運算子 ,可以直接用來比較

7)過載輸入輸出運算子 ,可以直接使用io

8)get_head()和get_tail()函式,用來取得值

9)length<>和element<>用來得到tuple的size和第n個的值型別

10)如果使用boost::tr1,則還可以使用std::tr1::tuple_size(),std::tr1::tuple_element(),分別用來得到tuple的size和第n個值的型別。

三 例項

1)tuple的構造,拷貝建構函式,get成員函式,get全域性函式,make_tuple全域性函式。 

#include

#include

#include "boost/tuple/tuple.hpp"

boost::tuples::tuple get_values()

class base

;    virtual void test()

};class derived : public base

};void main()

2)使用tie函式模版來生成對ref的繫結的tuple,tuple的比較使用,tuple的輸入輸出:

#include

#include

#include

#include

#include "boost/tuple/tuple.hpp"

#include "boost/tuple/tuple_comparison.hpp"

#include "boost/tuple/tuple_io.hpp"

template

class element_less

};int main()

四 注意

1)函式 make_tuple 類似於 std::make_pair. 預設情況下,make_tuple 設定元素型別為非const, 非引用的,即是最簡單的、根本的引數類

型。2)為了使乙個 tuple 的元素設為引用型別,你要使用函式 boost::ref, 它來自另乙個名為 boost.ref 的 boost 庫。

3)如果元素需要是 const 引用的,就使用來自 boost.ref 的 boost::cref。

4)如果你要使繫結的每個元素變數都為ref,則可以使用tie函式。

五 參考

1)beyond the c++ standard library: an introduction to boost

2)boost**document

原文鏈結:

[python] 

include  

#include  

#include  

using namespace std; 

using boost::tuple; 

class a; 

a class_a; 

boost::tuple<:string a> t1("abc", class_a); 

int main()   

int main()   

Boost庫的使用

fatal error c1083 無法開啟包括檔案 boost shared ptr.hpp no such file or directory它由c 標準委員會部分成員所設立的boost社群開發並維護,使用了許多現代c 程式設計技術,內容涵蓋字串處理 正規表示式 容器與資料結構 併發程式設計 函...

Boost庫使用總結

智慧型指標,與引用計數相關 auto ptr 主要為異常安全設計的,在程式正常退出或者異常終止,會呼叫類的析構函式,釋放資源。複製 賦值是損壞性的操作,所以不能繫結到陣列或者變數指標,也不能將auto ptr物件儲存在容器中。auto ptra new int 10 auto ptrb b.rese...

Boost庫使用 date time類庫

boost庫中使用了timer date time chrono處理時間與日期的問題。在上層開發中,經常碰到不同時間體系的處理,如格里高利歷 utc等,date time解決了大部分蕾絲的問題,是乙個較為全面 靈活的時間和日期類庫,並且可以與c的傳統時間結構tm相互轉換,提供底層支援。date ti...