Могу ли я избежать рекурсии шаблона здесь?

Я написалfor_each заtuples:

template <typename Tuple, typename F, size_t begin, size_t end>
enable_if_t<begin == end || tuple_size<Tuple>::value < end> for_each(Tuple&, F&&) {
}

template <typename Tuple, typename F, size_t begin = 0U, size_t end = tuple_size<Tuple>::value>
enable_if_t<begin < end && tuple_size<Tuple>::value >= end> for_each(Tuple& t, F&& f) {
    f(get<begin>(t));
    for_each<Tuple, F, begin + 1, end>(t, forward<F>(f));
}

[Живой пример]

НоОтвет Якка на этот вопрос дает замечательный пример того, как справиться с управлением лямбда на всехtuple ценностинерекурсивно:

namespace detail {
    template<class F, class...Args>
    void for_each_arg(F&& f, Args&&...args) {
        using detail = int[];

        static_cast<void>(detail{((f(std::forward<Args>(args))), void(), 0)..., 0});
    }
}

template <typename F, typename Tuple>
void for_each_tuple_element(F&& f, Tuple&& t) {
    return experimental::apply([&](auto&&...args) { detail::for_each_arg(forward<F>(f), decltype(args)(args)... ); }, forward<Tuple>(t));   
}

Это требуетapply, Вы можете увидеть мое упрощениеYakkответ здесь:http://ideone.com/yAYjmw

У меня вопрос такой:Есть ли способ как-то дооснаститьfor_each_tuple_element с диапазоном, избегая рекурсии, которую несет мой код? Я пытался построить подмножествоtuple определяется диапазоном, но я не могу сделать это без использования рекурсии, и тогда почему бы не только мойfor_each?

Ответы на вопрос(4)

Ваш ответ на вопрос