C 14 make_integer_sequence>
C 14 make_integer_sequence>C 14 make_integer_sequence 的實作與錯誤分析
簡介簡介
template< class T, T N, T... I > struct make_helper { typedef typename mpl::if_< T(0) == N, mpl::identity< integer_sequence<T,I...> >, make_helper< T, N-1, N-1,I...> >::type; };
簡介
template< class T , class N > using make_integer_sequence = typename make_helper<T,N>::type;
簡介
。簡化了建立類別模板integer_sequence。本文討論使用輔助結構和巨集的實現,並探討編譯過程中遇到的錯誤。make_integer_sequence的實作
為了實作 make_integer_sequence,定義了一個輔助結構 make_helper: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>{};
以上是如何有效率地實作C 14的`make_integer_sequence`並避免編譯錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!