#include <iostream>
#include <type_traits>
#include <utility>
#include <tuple>
template <template <typename> class Predicate, std::size_t N, typename Output, typename... Args> struct find_indices_h;
template <template <typename> class Predicate, std::size_t N, std::size_t... Is, typename First, typename... Rest>
struct find_indices_h<Predicate, N, std::index_sequence<Is...>, First, Rest...> : std::conditional_t<
Predicate<First>::value,
find_indices_h<Predicate, N+1, std::index_sequence<Is..., N>, Rest...>,
find_indices_h<Predicate, N+1, std::index_sequence<Is...>, Rest...>
> {};
template <template <typename> class Predicate, std::size_t N, typename Sequence>
struct find_indices_h<Predicate, N, Sequence> {
using type = Sequence;
};
template <template <typename> class Predicate, typename... Args>
using find_indices = typename find_indices_h<Predicate, 0, std::index_sequence<>, Args...>::type;
template <typename... Args>
void print (Args&&... args) {
const int a[] = {(std::cout << args << ' ', 0)...};
static_cast<void>(a);
std::cout << '\n';
}
template <typename F, typename Tuple, std::size_t... Is>
void partial_apply (F f, Tuple&& tuple, std::index_sequence<Is...>) {
f(std::get<Is>(std::forward<Tuple>(tuple))...);
}
template<typename... Args>
void print_filter (const Args&... args) {
const auto partial_print = [](auto&&... ps) { return print(std::forward<decltype(ps)>(ps)...); };
partial_apply(partial_print, std::forward_as_tuple(args...), find_indices<std::is_integral, Args...>{});
}
int main() {
std::cout << std::boolalpha;
print_filter(1, "hello", 'a', true, 1.3, 1000); // 1 a true 1000
}
Alle Antworten sind so genial, dass ich nicht, was man am besten entscheiden können, danke. –