Saltar al contenido

[Boost en español III] Tuplas

14 julio 2010

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, como boost::tuple.
  • En la biblioteca estándar, en la cabecera tr1/tuple, como std::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.

Advertisement
Un Comentario dejar un →
  1. 14 julio 2010 17:23

    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.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.