元ネタ:可変引数テンプレートでzip
transposeは行と列を変換するメタ関数です。
template <class ...Sequence> struct transpose; template <class ...Elements1, class ...Elements2> struct transpose<std::tuple<Elements1...>, std::tuple<Elements2...>> { typedef std::tuple<std::tuple<Elements1, Elements2>...> type; }; template <class ...Elements1, class ...Elements2, class ...Elements3> struct transpose<std::tuple<Elements1...>, std::tuple<Elements2...>, std::tuple<Elements3...>> { typedef std::tuple<std::tuple<Elements1, Elements2, Elements3>...> type; }; ...
以下のように使用した場合には
typedef transpose< tuple<int, long, int&>, tuple<double, float, double&>, tuple<char, const char*, char&> >::type type;
typeの型は以下のようになります。
tuple< tuple<int, double, char>, tuple<long, float, const char*>, tuple<int&, double&, char&> >
こういうのを用意して
template <char ...Args> class tuple_c {}; template <char ...Sequence> struct transpose_c;
こういうことしたいんだけど
typedef transpose_c< tuple_c<'1', '2', '3'>, tuple_c<'4', '5', '6'>, tuple_c<'7', '8', '9'> >::type type;
どうもうまくいかない。