¿Cómo hacer una función que comprima dos tuplas en C ++ 11 (STL)?
Hace poco me encontré con este rompecabezas, finalmente pude encontrar una respuesta intrépida (utilizando matrices de índices) y quise compartirla (respuesta a continuación). Estoy seguro de que hay respuestas que usan recursión de plantillas y respuestas que usanboost
; Si está interesado, por favor comparta otras maneras de hacer esto. Creo que tener todo esto en un solo lugar puede beneficiar a otros y ser útil para aprender algunos de los trucos de metaprogramación de plantillas de C ++ 11.
Problema: Dadas dos tuplas de igual longitud:
auto tup1 = std::make_tuple(1, 'b', -10);
auto tup2 = std::make_tuple(2.5, 2, std::string("even strings?!"));
¿Cómo se crea una función que "comprima" las dos tuplas en una tupla heterogénea de pares?
std::tuple<
std::pair<int, double>,
std::pair<char, int>,
std::pair<int, std::string> > result =
tuple_zip( tup1, tup2 );
Dónde
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?!"));