c++令人崩潰的模板.

// 別名=>乾淨.
template<class T> using Invoke = typename T::type;
template<unsigned...> struct seq{ using type = seq; };//必須要有類型.
template<class S1, class S2> struct concat;//連接
template<unsigned... I1, unsigned... I2>
struct concat<seq<I1...>, seq<I2...>>
  : seq<I1..., (sizeof...(I1)+I2)...>{};//這是合併序列的方式.
template<class S1, class S2>
using Concat = Invoke<concat<S1, S2>>;//調用
template<unsigned N> struct gen_seq;
template<unsigned N> using GenSeq = Invoke<gen_seq<N>>;//麻煩不?
template<unsigned N>
struct gen_seq : Concat<GenSeq<N/2>, GenSeq<N - N/2>>{};//麻煩不?
template<> struct gen_seq<0> : seq<>{};
template<> struct gen_seq<1> : seq<0>{};<類 A,類 B>構 序並;<...A,...B>構 序並<序列<A...>,序列<B...>>:
序列<A...,B...>{};//觀察如何實現的,但這裏(序列::型)
//這樣搞的序列<a,b,c>裏面得有{用 型=序列;}
空 測試3(){
    用 e=序列<2,3,6>;
    用 g=序列<2,3,6>;
    用 h=序並<e,g>::;//沒有型,那是不行的,會直接生成序並<序列<>..>
    類型啊<h>();//
}
//旋轉打印:<整 N,整 M,型名 T,...O>
空 測試(序列<O...>&x,T&t){
    打印(<(O+M)%N>(t)...);//(n+m)%n,O爲變量
}<整 N,整 M,型名 T>
空 測試2(T&t){
    造序<N>::型 p;測試<N,M>(p,t);
}
//找半天的錯誤.
//原來造序沒寫對.
//造序,要繼承的是自己造序<...>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章