C++0x 可変引数テンプレートでzip

元ネタ:Variadic Templates for C++0x(PDF)


zipは2つの型リストをペアにするメタ関数です。

template <class Sequence1, class Sequence2>
struct zip;

template <class ...Elements1, class ...Elements2>
struct zip<std::tuple<Elements1...>, std::tuple<Elements2...>> {
    typedef std::tuple<std::pair<Elements1, Elements2>...> type;
};


以下のように使用した場合には

typedef
    zip<
        tuple<int, string>,
        tuple<char, double>
    >::type
type;

typeの型は以下のようになります。

tuple<
    pair<int, char>,
    pair<string, double>
>


参考:Haskell : zip