可変引数テンプレートでの型リスト - filter
filterは型リストから条件にあった型を抽出するメタ関数です。
mapと同じく高階メタ関数になってます。
template <template <class T> class P, class Seq1, class Seq2> struct filter_impl; template <template <class T> class P, class... Seq, class Head, class... Tail> struct filter_impl<P, tuple<Seq...>, tuple<Head, Tail...>> { typedef typename filter_impl<P, typename add_if<P, Head, tuple<Seq...>>::type, tuple<Tail...>>::type type; }; template <template <class T> class P, class... Seq> struct filter_impl<P, tuple<Seq...>, tuple<>> { typedef tuple<Seq...> type; }; template <template <class T> class P, class... Seq> struct filter; template <template <class T> class P, class... Seq> struct filter<P, tuple<Seq...>> { typedef typename filter_impl<P, tuple<>, tuple<Seq...>>::type type; };
filter<is_integral, tuple<int, double, long>>::type → tuple<int, long>
filterの実装で使用しているadd_ifメタ関数はこれです。