使用C 0x變長引數模板實現元組

2021-08-31 13:10:11 字數 1540 閱讀 4173

最近有空研究了一下c++0x相關的問題,並且在gcc4.6下用變長引數模板實現元組。

templatestruct mytuple;

template<> struct mytuple<> {};

templatestruct elementtype;

templatestruct mytuple

mytuple(const mytuple& t)

: tail(t.tail)

, head(t.head)

mytuple(mytuple&& t)

: tail(t.tail)

, head(t.head)

mytupletail;

head head;

typedef head headtype;

typedef mytupletailtype;

};//獲取元組指定元素的值

template struct get_class

template static const typename elementtype>::type& get(const mytuple& t )

};template <>

struct get_class<0>

template static const typename mytuple::headtype& get(const mytuple& t )

};//推導元組指定元素的型別

templatestruct elementtype

;templatestruct elementtype<0, t>

;template < int k,typename head, typename ... tail>

typename elementtype>::type& get(mytuple& t)

template < int k,typename head, typename ... tail>

const typename elementtype>::type& get(const mytuple& t)

使用方式:

mytuplet(2.1,0,1.11,6666,"helloworld z","world");

cout << get<0>(t) << get<1>(t) << get<2>(t) << get<3>(t) << get<4>(t) << get<5>(t) << std::endl;

get<0>(t) = 100;

get<1>(t) = 10;

get<4>(t) = "gg world";

const mytupletc(0,0,111.1,5555,"helloworld");

cout << get<0>(tc) << get<1>(tc) << get<2>(tc) << get<3>(tc) << get<4>(tc) << std::endl;

cout << get<1>( mytuple(3.1415926,'c')) << std::endl;

c 變長引數模板函式

c 中有乙個重要特性,那就是模板型別。類似於objective c中的泛型。c 通過類模板來實現泛型支援。類模板,可以定義相同的操作,擁有不同資料型別的成員屬性。通常使用template來宣告。告訴編譯器,碰到t不要報錯,表示一種泛型.如下,宣告乙個普通的類模板 template void foo ...

c 11變長引數函式模板

by francis hao mar 25,2018 乙個最簡單的例項大概是這個樣子 include usingnamespacestd 變長引數函式模板宣告 template typename.t voidprint t.val 邊界條件 voidprint void 遞迴的特例化定義 templ...

走進C 11(十四)變長引數模板

解釋 c 03只有固定模板引數。c 11 加入新的表示法,允許任意個數 任意類別的模板引數,不必在定義時將引數的個數固定。變長模板 變長引數是依靠c 11新引入的引數包的機制實現的。templatestruct tuple tuple t0 types不含任何實參tuplet1 types含有乙個實...