Per*_*-lk 2 c++ boost c++14 boost-hana
我想知道,不使用典型的递归函数,而是使用boost::hana例如,如何以最简单的方式转换boost和std工具以下类型的对象(例如):
std::tuple<int, double, char, double>
Run Code Online (Sandbox Code Playgroud)
到类型的对象:
std::tuple<std::pair<int, double>, std::pair<char, double> >;
Run Code Online (Sandbox Code Playgroud)
我正在查看boost::hana文档,但我发现没有比使用递归模板化函数手动编程更简单的方法(我不得不说有hana的函数,我无法理解).
注意:我最初想到的是创建一个从0到N(hana::range)的整数范围,然后在两组偶数和赔率索引中过滤它们,并为每组索引获取相应的值并应用在两个列表中成对运行以创建std::pairs ...这些步骤太多,并且可以通过手动实现更容易实现; 但我确信我在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>());
}
Run Code Online (Sandbox Code Playgroud)