Aplicando uma função a cada elemento de uma tupla

Dado umstd::tupleobjeto semelhante (ou seja, comtuple_size eget semântica) e um objeto de função unárioftor, Eu quero poder ligarftor em cada elemento dotupleobjeto parecido.

Se desconsiderar o valor de retorno, conheço o truque da matriz int:

namespace details {

template <typename Ftor, typename Tuple, size_t... Is>
void apply_unary(Ftor&& ftor, Tuple&& tuple, std::index_sequence<Is...>) {
    using std::get;
    int arr[] = { (ftor(get<Is>(std::forward<Tuple>(tuple))), void(), 0)... };
}

} // namespace details

template <typename Ftor, typename Tuple>
void apply_unary(Ftor&& ftor, Tuple&& tuple) {
    details::apply_unary(std::forward<Ftor>(ftor),
                         std::forward<Tuple>(tuple),
                         std::make_index_sequence<std::tuple_size<Tuple>::value> {});
}

Se eu quiser os valores de retorno, eu poderia substituir oint [] truque com uma chamada parastd::make_tuple em vez disso e devolva isso. Isso funcionaria desde que nenhuma das chamadas para oftor objeto tem umvoid valor de retorno...

A pergunta que tenho é, portanto: considerando que quero obter os resultados da chamada, como posso lidar com as chamadas que podem retornarvoid?

O único requisito é que eu obtenha os resultados como uma tupla e seja capaz de dizer qual chamada leva a qual elemento da referida tupla de resultado.

questionAnswers(2)

yourAnswerToTheQuestion