[Boost en español III] Tuplas
Las tuplas en C++ son una versión generalizada de std::pair, en las que podremos almacenar un número arbitrario de valores de distinto tipo.
Al formar parte de TR1, podréis encontrarlas:
- En la cabecera
boost/tuple/tuple.hpp, comoboost::tuple. - En la biblioteca estándar, en la cabecera
tr1/tuple, comostd::tr1::tuple.
Las tuplas se declaran de manera similar a los pares, indicando la cantidad y tipos de los datos contenidos como parámetros de plantilla. Podemos inicializar los datos pasándole los valores al constructor.
boost::tuple<int, string, string> miTupla (1, "Cisco", "Pepe");
Para los pares, se utilizaba first y second para acceder a los datos, pero al tener un número variable de elementos, con las tuplas hace falta alguna forma más genérica. Para ello se proporciona la función paramétrica get, que recibe como parámetro de plantilla el índice el elemento al que queremos acceder. Al devolver una referencia, nos servirá tanto de getter como de setter.
string cadena = miTupla.get<1>(); miTupla.get<0>() = 5;
Otra de las utilidades que vienen con las tuplas es tie, que nos permitirá darle valor a varias variables de una vez, incluso utilizando el valor de retorno de una función. Además, tie funciona tanto con tuplas como con los pares tradicionales.
pair<int, int> fun (){
return make_pair(5, 3);
}
int main(int argc, char *argv[])
{
int a, b;
tr1::tie(a, b) = fun();
printf("a:%i, b:%i\n", a, b);
}
Las tuplas traen muchas más funciones y utilidades, como por ejemplo para personalizar los operadores de flujos facilitando la entrada y salida, y muchas otras opciones que podéis observar en la documentación oficial.

Anda, si es parte de la TR y todo… mira, por lo menos han traído un primo hermano de la asignación múltiple que tanto me gustaba de Python.