Yat-il un concis façon d'obtenir une séquence d'indices d'éléments de tuples qui satisfont un prédicat à Hana?Séquence d'indices d'éléments de tuple satifying prédicat dans Hana
Voici le code que j'ai écrit pour cela en utilisant seulement la bibliothèque standard:
template <template<typename> typename Pred, typename Tuple>
class get_indices_of {
static constexpr size_t size = std::tuple_size<Tuple>::value;
template <size_t I, size_t... II> struct impl {
using type = std::conditional_t<
Pred<std::tuple_element_t<I,Tuple>>::value,
typename impl<I+1, II..., I>::type,
typename impl<I+1, II...>::type >;
};
template <size_t... II> struct impl<size,II...> {
using type = std::index_sequence<II...>;
};
public:
using type = typename impl<0>::type;
};
template <template<typename> typename Pred, typename Tuple>
using get_indices_of_t = typename get_indices_of<Pred,Tuple>::type;
Exemple d'utilisation:
using types = std::tuple<std::string,int,double,char>;
using ints = get_indices_of_t<std::is_integral,types>;
Le type de ints
est maintenant std::index_sequence<1ul, 3ul>
.
Quel est le problème avec votre code? De toute façon, ça va être envoyé dans un en-tête de bibliothèque, alors on s'en fout si c'est un peu compliqué. J'ai quelques idées sur la façon dont cela pourrait être fait différemment, mais sans savoir quel est le problème avec votre approche actuelle, il est difficile de savoir ce qui serait le mieux. – Frank
Il n'y a pas de problème avec mon code. Je l'ai posté comme une explication de ce que je veux faire. Je veux juste savoir si Hana a un algorithme pour ça. – SU3