VariadicTemplatesに整数を渡す
型(のparameter pack)だったらtupleに渡せばいいみたいだけど,
intの並びだとstd::tupleは受け取ってくれないのでseqを定義した.
namespace jefuty { namespace mpl { // 特殊化に使うためのintの並び template<int... XS> struct seq { }; // Seq中のN番目の要素にアクセスする template<int N, typename Seq> struct at ; // at N [X:XS] = at (N-1) XS template<int N, int X, int... XS> struct at<N, seq<X,XS...> > { static int const value = at<N-1, seq<XS...> >::value; }; // at 0 [X:XS] = X template<int X, int... XS> struct at<0, seq<X,XS...> > { static int const value = X; }; template<int... XS> struct head_ : at<0, seq<XS...>> { }; } // namespace mpl } // namespace jefuty int main () { using namespace jefuty; BOOST_STATIC_ASSERT((mpl::at<0,mpl::seq<1>>::value == 1)); BOOST_STATIC_ASSERT((mpl::at<1,mpl::seq<1,2,3,4,5>>::value == 2)); BOOST_STATIC_ASSERT((mpl::at<2,mpl::seq<1,2,3,4,5>>::value == 3)); BOOST_STATIC_ASSERT((mpl::at<3,mpl::seq<1,2,3,4,5>>::value == 4)); BOOST_STATIC_ASSERT((mpl::at<4,mpl::seq<1,2,3,4,5>>::value == 5)); }
ふむ. 使わないとすぐ構文忘れますね.