我想知道,不使用典型的递归函数,但使用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
...这些步骤太多,并且可以通过手动实现更容易实现;但我确信在hana文档中我遗漏了一些东西。
答案 0 :(得分:6)
没有递归,你可以这样做:
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>());
}