User Tools

Site Tools


cpp:filtertype
snippet.cpp
template<typename... T>
struct TypeList;
 
template<template<typename...>typename E, typename F, typename... Ts>
struct FilterImpl;
 
template<template<typename...>typename E, typename F, typename... OUTs>
struct FilterImpl<E, F, TypeList<>, TypeList<OUTs...>>
{
  using type = E<OUTs...>;
};
 
template<template<typename...>typename E, typename F, typename... INs, typename... OUTs>
struct FilterImpl<E, F, TypeList<F, INs...>, TypeList<OUTs...>>
{
  using type = typename FilterImpl<E, F, TypeList<INs...>, TypeList<OUTs...>>::type;
};
 
template<template<typename...>typename E, typename F, typename T1, typename... INs, typename... OUTs>
struct FilterImpl<E, F, TypeList<T1, INs...>, TypeList<OUTs...>>
{
  using type = typename FilterImpl<E, F, TypeList<INs...>, TypeList<T1, OUTs...>>::type;
};
 
 
template<template<typename...> typename E, typename F, typename... Ts>
struct Filter
{
  using type = typename FilterImpl<E, F, TypeList<Ts...>, TypeList<>>::type;
};
 
template<template<typename...> typename E, typename F, typename... Ts>
using Filter_t = typename Filter<E, F, Ts...>::type;
cpp/filtertype.txt · Last modified: by allspark