我想知道,不使用典型的递归函数,而是使用 boost::hana
例如,如何以最简单的方式使用 boost
和 std
工具是以下类型的对象(例如):
std::tuple<int, double, char, double>
一个类型的对象:
std::tuple<std::pair<int, double>, std::pair<char, double> >;
我正在查看 boost::hana
文档,但我发现没有比使用递归模板函数手动编程更简单的方法了(我不得不说我有 hana 的函数无法理解)。
注意:我最初的想法是创建从 0 到 N 的整数范围(hana::range
),然后将它们过滤成两组偶数和奇数索引,以及为每组索引获取相应的值,并成对地在两个列表上应用一个函数来创建 std::pair
s...这些步骤太多了并且可以通过手动实现更容易地实现;但我确定我在 hana 文档中遗漏了某些内容。
最佳答案
没有递归,你可以这样做:
template <typename Tuple, std::size_t... Is>
auto to_tuple_pairs(Tuple&& tuple, std::index_sequence<Is...>)
{
return make_tuple(std::make_pair(std::get<2 * Is>(tuple), std::get<2 * Is + 1>(tuple))...);
}
template <typename Tuple>
auto to_tuple_pairs(Tuple&& tuple)
{
return to_tuple_pairs(std::forward<Tuple>(tuple),
std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value / 2>());
}
关于c++ - 从 N 个元素的元组到 N/2 对的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842908/