Недавно я столкнулся с этой загадкой, наконец, смог бороться с хакерским ответом (используя индексные массивы) и хотел поделиться им (ответ ниже). Я уверен, что есть ответы, которые используют рекурсию шаблона и ответы, которые используют boost
; если вам интересно, пожалуйста, поделитесь другими способами. Я думаю, что все это в одном месте может принести пользу другим и быть полезным для изучения некоторых интересных трюков метапрограммирования шаблонов С++ 11.
Проблема: Учитывая два кортежа равной длины:
auto tup1 = std::make_tuple(1, 'b', -10);
auto tup2 = std::make_tuple(2.5, 2, std::string("even strings?!"));
Как вы создаете функцию, которая "застегивает" два кортежа в гетерогенный набор пар?
std::tuple<
std::pair<int, double>,
std::pair<char, int>,
std::pair<int, std::string> > result =
tuple_zip( tup1, tup2 );
Где
std::get<0>(result) == std::make_pair(1, 2.5);
std::get<1>(result) == std::make_pair('b', 2);
std::get<2>(result) == std::make_pair(-10, std::string("even strings?!"));