Я искал this tuple for_each()
implementation несколько месяцев назад и задавался вопросом, возможно ли реализовать версию, которая собирает возвращаемые значения при вызове функций в кортеж в результате?Есть ли кортеж for_each(), который возвращает кортеж всех значений, возвращаемых из вызванных функций?
Причина, по которой я хочу сделать это в моей базе кода У меня есть следующая функция, которая принимает входной список вариаций в форме и возвращает кортеж значений.
template <typename... T, typename... R>
static constexpr auto map_to_opengl(T &&... shapes)
{
return std::make_tuple(shape_mapper::map_to_array_floats(shapes)...);
}
Ну, я хотел бы изменить свою подпись функции, чтобы принять кортеж формы, и возвращает результат вызова функции в каждой форме (это должно быть семантически эквивалентен коду выше). Если я смогу это сделать, я могу сохранить код более сухим, что важно для меня.
template <typename... T, typename... R>
static constexpr auto map_to_opengl(std::tuple<T...> &&shapes)
{
return tuple_foreach(shapes, &shape_mapper::map_to_array_floats);
}
Однако реализация tuple_foreach
не позволяет все значения должны быть собраны. Можно ли написать такую функцию? Если она существует в Hana, я пропустил это :(
Я думаю, вы не могли бы назвать этот алгоритм for_each, но, возможно, накапливают? Я не уверен, что здесь.
Вы можете комбинировать существующий код с новым ['std :: apply'] (http://en.cppreference.com/w/cpp/utility/apply)? –
Возможно, но я не уверен, как «собрать» значения в кортеж, если бы я должен был называть применительно к каждой функции, поскольку каждая функция вызывается один за другим, я понятия не имею, где бы я помещал промежуточные возвращаемые значения. – Short
Терминологические языки FP назовут это «картой», C++ назвал бы это «преобразованием». – ildjarn