Hanaの述語を満たすタプル要素のインデックスのシーケンスを取得する方法は簡潔ですか?ハナの述語を満たすタプル要素のインデックスのシーケンス
ここで私はちょうど標準ライブラリを使用しているために書いたコードです:
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;
使用例:
using types = std::tuple<std::string,int,double,char>;
using ints = get_indices_of_t<std::is_integral,types>;
をints
のタイプは今std::index_sequence<1ul, 3ul>
ですが。
コードには何が問題なのですか?それはちょうど図書館の見出しの中でちょっと酔っぱらってしまいます。だからちょっと畳んでいる人は気にします。どうやってこれをどうやってやることができるかといういくつかのアイデアがありますが、あなたの現在のアプローチの問題点が分からずに、何が最善であるかを理解するのは難しいです。 – Frank
私のコードに問題はありません。私は何をしたいのかの説明として投稿しました。私はハナがこのためのアルゴリズムを持っているかどうかを知りたいだけです。 – SU3