最近有空研究了一下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含有乙個實...