从N元素的元组到N / 2对的元组

时间:2017-10-20 05:35:05

标签: c++ boost c++14 boost-hana

我想知道,不使用典型的递归函数,但使用boost::hana例如,如何使用booststd工具以最简单的方式转换对象以下类型(例如):

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文档中我遗漏了一些东西。

1 个答案:

答案 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>());
}

Demo