ECSTASY
All in the name
Loading...
Searching...
No Matches
filter.hpp
Go to the documentation of this file.
1
11
12#ifndef UTIL_META_FILTER_HPP_
13#define UTIL_META_FILTER_HPP_
14
15#include "Traits.hpp"
16
17namespace util::meta
18{
33 template <typename Treated, template <typename> typename Filter, typename... Untreated>
34 struct _filter {
35 using type = Traits<>;
36 };
37
40 template <typename... Treated, template <typename> typename Filter>
41 struct _filter<Traits<Treated...>, Filter> {
42 using type = Traits<Treated...>;
43 };
44
47 template <typename... Treated, template <typename> typename Filter, typename Current, typename... Untreated>
48 struct _filter<Traits<Treated...>, Filter, Current, Untreated...> {
49 using type = typename _filter<
50 std::conditional_t<Filter<Current>::value, Traits<Treated..., Current>, Traits<Treated...>>, Filter,
51 Untreated...>::type;
52 };
53
67 template <template <typename> typename Filter, typename... Ts>
68 struct filter {
69 using type = typename _filter<Traits<>, Filter, Ts...>::type;
70 };
71
81 template <template <typename> typename Filter, typename... Ts>
82 using filter_t = typename filter<Filter, Ts...>::type;
83
84} // namespace util::meta
85
86#endif /* !UTIL_META_FILTER_HPP_ */
Helper types for parameter packs.
Namespace regrouping all meta programmation helper types.
typename filter< Filter, Ts... >::type filter_t
Helper for filter<...>::type.
Definition filter.hpp:82
typename _filter< std::conditional_t< Filter< Current >::value, Traits< Treated..., Current >, Traits< Treated... > >, Filter, Untreated... >::type type
Definition filter.hpp:51
Empty parameter pack helper type.
Definition Traits.hpp:28
Filter the types in Ts keeping only those for which Filter<T>::value was true.
Definition filter.hpp:68
typename _filter< Traits<>, Filter, Ts... >::type type
Definition filter.hpp:69