2010-07-14 9 views
73

Quiero generar UUID aleatorios, ya que solo es importante que las instancias de mi programa tengan identificadores únicos. Miré en Boost UUID, pero no puedo generar el UUID porque no entiendo qué clase y método usar.Ejemplo de generación de UUID con Boost en C++

Agradecería que alguien me diera algún ejemplo de cómo lograr esto.

Respuesta

129

Un ejemplo básico:

#include <boost/uuid/uuid.hpp>   // uuid class 
#include <boost/uuid/uuid_generators.hpp> // generators 
#include <boost/uuid/uuid_io.hpp>   // streaming operators etc. 

int main() { 
    boost::uuids::uuid uuid = boost::uuids::random_generator()(); 
    std::cout << uuid << std::endl; 
} 

Ejemplo de salida:

7feb24af-fc38-44de-bc38-04defc3804de

+0

¡Gracias! Estaba confundido por dos pares de corchetes. :) – Nikola

+3

¿Y cómo lo asignarías a una cadena? Porque tengo una base común para cada instancia y necesitaría concatenar UUID a una base. ¡Gracias de nuevo! – Nikola

+20

@nik: utilice el [soporte de transmisión] (http://www.boost.org/doc/libs/1_43_0/libs/uuid/uuid.html#boost/uuid/uuid_io.hpp) - hay un 'stringstream' ejemplo. O deje 'boost :: lexical_cast (uuid)' hacer eso por usted. –

15

La respuesta de Georg Fritzsche está bien, pero tal vez un poco engañoso. Debe reutilizar el generador si necesita más de un uuid. Quizás esté más claro de esta manera:

#include <iostream> 

#include <boost/uuid/uuid.hpp>   // uuid class 
#include <boost/uuid/uuid_generators.hpp> // generators 
#include <boost/uuid/uuid_io.hpp>   // streaming operators etc. 


int main() 
{ 
    boost::uuids::random_generator generator; 

    boost::uuids::uuid uuid1 = generator(); 
    std::cout << uuid1 << std::endl; 

    boost::uuids::uuid uuid2 = generator(); 
    std::cout << uuid2 << std::endl; 

    return 0; 
} 
+0

¿Por qué debería volver a usar los generadores? ¿Es esto una optimización del rendimiento o un consejo de seguridad? – Fred

+2

para el rendimiento – Nikko

+2

No sería una identificación universal muy buena si el uso de un nuevo generador causara problemas de exclusividad. – xaxxon

Cuestiones relacionadas