從零開始寫STL 模板元程式設計之tuple

2022-07-29 02:54:08 字數 1392 閱讀 7604

class template std::tuple is a fixed-size collection of heterogeneous values. it is a generalization of std::pair.

可以用來在bind中儲存函式指標和引數

不定引數模板 + 模板偏特化

tuple作為乙個儲存不定引數模板的類,分為一下幾種偏特化形式:

template<>

struct tuple<> {};

template

struct tuple: public tuple

template

struct tuple: public nulltuple

可以注意到每個模板struct tuple: public tuple作為其上一級模板的子類來展開,這樣在獲取tuple_at時從前向後維護乙個當前元素的下標計數來訪問元素

templatestruct tuple;

template<>

struct tuple<> {};

typedef tuple<> nulltuple;

templatestruct tuple: public tuple

tuple(t&& v, args&&... tails) :base_type(std::move(tails)...), value(std::forward(v)) {}

tuple(t&& v, args&... tails) :base_type(std::move(tails)...), value(std::forward(v)) {}

tuple(t& v, args&&... tails) :base_type(std::move(tails)...), value(std::forward(v)) {}

t& getval()

t value;

}; templatestruct tuple: public nulltuple

t& getval()

t value;

}; templatestruct tuple_at;

templatestruct tuple_at>

; templatestruct tuple_at<0, tuple>

; templatestruct tuple_at<0, tuple>

; template<>

struct tuple_at<0,tuple<>>

; templatetypename tuple_at>::value_type& tuple_get(tuple& t)

從零開始寫STL 容器 vector

vector又稱為動態陣列,那麼動態體現在 vector和一般的陣列又有什麼區別?vector中各個函式的實現原理是怎樣的,我們怎樣使用會更高效?在容器類的最前面我們會看到許多的typedef 常見的如下 public typedef t value type typedef value type ...

從零開始寫STL 二叉搜尋樹

二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。平均情況下插入查詢...

如何從零開始寫shell指令碼

如何從零開始寫shell指令碼 一 前言 為什麼我們需要使用shell 指令碼?難道我們之前學習的c c 不能夠完成shell指令碼語言的功能嗎,為什麼我們還需要學習shell指令碼?學習shell指令碼最大的好處是能夠輕易處理檔案與目錄之類的物件,如果同樣此類任務,利用c 或者c,則編寫程式很麻煩...