可変引数テンプレートによる型リストでリスト処理作っていこうと思います。
手始めに、型リストの先頭を取り出すheadと、後部を取り出すtailです。
template <class Head, class... Tail> struct head { typedef Head type; }; template <class Head, class... Tail> struct head<tuple<Head, Tail...>> { typedef Head type; };
head<int, double, long>::type → int
head<tuple<int, double, long>>::type → int
template <class... Args> struct tail; template <class Head, class... Tail> struct tail<tuple<Head, Tail...>> { typedef tuple<Tail...> type; };
tail<tuple<int, double, long>>::type → tuple<double, long>
メタ関数の戻り値の型を可変長にするために、tuple使ってます。