我想知道,不使用典型的递归函数,而是使用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文档中有一些东西我忽略了。
发布于 2017-10-19 23:41:16
不使用递归,您可以:
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>());
}
https://stackoverflow.com/questions/46842908
复制相似问题