Недавно я столкнулся с этой головоломкой, наконец-то смог найти хакерский ответ (с использованием массивов индексов )и хотел поделиться этим (ответом ниже ). Я уверен, что есть ответы, использующие рекурсию шаблонов, и ответы, использующие boost
; если вам интересно, пожалуйста, поделитесь другими способами сделать это. Я думаю, что наличие всего этого в одном месте может принести пользу другим и будет полезно для изучения некоторых крутых приемов метапрограммирования шаблонов C++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?!"));