【发布时间】:2016-12-17 14:39:43
【问题描述】:
几个月前我浏览了this tuple for_each() implementation,想知道是否有可能实现一个版本,将调用函数的返回值收集到一个元组中?
我想在我的代码库中执行此操作的原因是,我有以下函数,它接受一个形状的可变参数列表的输入,并返回一个值的元组。
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结合起来? -
也许,但如果我要对每个函数调用 apply ,我不确定如何将值“收集”到一个元组中,因为每个函数都是一个一个调用的,我不知道我在哪里将放置中间返回值。
-
在术语方面,FP 语言将其称为“地图”,C++ 将其称为“变换”。
-
确实,您正在寻找
hana::transform。