C 11 理解 二十 之 多元組類別

2021-06-18 01:33:42 字數 1543 閱讀 1747

多元組是乙個內由數個異質物件以特定順序排列而成的資料結構。多元組可被視為是struct其資料成員的一般化。

由 tr1 演進而來的 c++11 多元組類別將受益於 c++11 某些特色像是變長引數模板。tr1 版本的多元組類別對所能容納的物件個數會因實現而有所限制,且實現上需要用到大量的巨集技巧。相反的,c++11 版本的多元組型基本上於對其能容納的物件個數沒有限制。然而,編譯器對於模板實體化的遞迴深度上的限制仍舊影響了元組類別所能容納的物件個數 (這是無法避免的情況); c++11 版本的多元組型不會把這個值讓使用者知道。

使用變長引數模板,多元組類別的宣告可以長得像下面這樣:

template

<

class ...types

>

class tuple;

底下是乙個多元組類別的定義和使用情況:

typedef std::

tuple

<

int, double, long

&, const

char

*> test_tuple;

long lengthy =12;

test_tuple proof (

18, 6.5, lengthy, "ciao!");

lengthy = std::

get<

0>

(proof)

;// 將 proof 的第乙個元素賦值給 lengthy (索引從零開始起跳)

std::

get<

3>

(proof)

=" beautiful!"

;// 修改 proof 的第四個元素

我們可以定義乙個多元組類別物件proof而不指定其內容,前提是proof裡的元素其類別定義了預設建構函式 (default constructor)。此外,以乙個多元組類別物件賦值給另乙個多元組類別物件是可能的,但只有在以下情況: 若這兩個多元組類別相同,則其內含的每乙個元素其類別都要定義拷貝建構函式 (copy constructor); 否則的話,賦值操作符右邊的多元組其內含元素的類別必須能轉換成左邊的多元組其對應的元素類別,又或者賦值操作符左邊的多元組其內含元素的類別必須定義適當的建構函式。

typedef std::

tuple

<

int , double, string > tuple_1 t1;

typedef std::

tuple

<

char, short , const

char

*> tuple_2 t2 (

'x', 2, "hola!");

t1 = t2 ;

// 可行。前兩個元素會作型別轉換,

// 第三個字串元素可由 'const char *' 所建構。

多元組型別物件的比較運算是可行的(當它們擁有同樣數量的元素)。此外,c++11 提供兩個表示式用來檢查多元組型別的一些特性 (僅在編譯期做此檢查)。

C 11新特性tuple多元陣列

tuple是c 11新的標準庫之一,其表示n元陣列,它相當於有n個成員的結構體,只不過這個結構體的成員都是匿名的。tuple是類似於pair的模板,tuple像是pair的泛化版本,pair只能存放兩個成員,而tuple則可以多個成員,相同的是,pair和tuple都允許其成員的型別不一樣。tupl...

C 11 理解 之 多態函式物件包裝器

針對函式物件的多型包裝器 又稱多態函式物件包裝器 在語義和語法上和函式指標相似,但不像函式指標那麼狹隘。只要能被呼叫,且其引數能與包裝器相容的都能以多態函式物件包裝器稱之 函式指標,成員函式指標或仿函式 通過以下例子,我們可以了解多態函式物件包裝器的特性 std function int int,i...

c 11中的tuple(元組)

這次要講的內容是 c 11中的tuple 元組 tuple看似簡單,其實它是簡約而不簡單,可以說它是c 11中乙個既簡單又複雜的東東,關於它簡單的一面是它很容易使用,複雜的一面是它內部隱藏了太多細節,要揭開它神秘的面紗時又比較困難。tuple是乙個固定大小的不同型別值的集合,是泛化的std pair...