Contoh pembuatan UUID menggunakan Boost di C ++


94

Saya ingin membuat UUID acak, karena sangat penting untuk instance dalam program saya untuk memiliki pengenal unik. Saya melihat ke Boost UUID , tetapi saya tidak dapat membuat UUID karena saya tidak mengerti kelas dan metode mana yang akan digunakan.

Saya akan sangat menghargai jika seseorang dapat memberi saya contoh bagaimana mencapai ini.

Jawaban:


165

Contoh dasar:

#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;
}

Contoh keluaran:

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


4
Dan bagaimana Anda menetapkannya ke string? Karena saya memiliki basis yang sama untuk setiap contoh dan saya perlu menggabungkan UUID ke basis. Terima kasih lagi!
Nikola

22
@nik: Gunakan dukungan streaming - ada stringstreamcontohnya. Atau biarkan boost::lexical_cast<std::string>(uuid)lakukan itu untukmu.
Georg Fritzsche

15
Adapun tanda kurung ganda: Yang pertama membangun sebuah instance random_generator, yang kedua menggunakan operator()instance itu. Anda harus menyimpan generator dan memanggilnya operator()jika Anda ingin menghasilkan lebih dari satu uuid:random_generator rg; uuid ui = rg();
Georg Fritzsche

34
@ Nikola: gunakan boost :: uuids :: to_string (uuid) untuk merangkai uuids
Raja

2
@GeorgFritzsche Bersama-sama, waktu yang tepat dan alamat jaringan individu mesin secara unik. Saya pikir karena itu mungkin kunci yang bagus untuk fungsi hash. Saya tidak butuh nilai yang jelas nanti. Tapi ide Anda memberi saya ide. Mungkin bagus untuk menggunakan waktu dan alamat jaringan sebagai seed untuk generator nomor acak atau lebih.
danijar

34

Jawaban dari Georg Fritzsche ok tapi mungkin agak menyesatkan. Anda harus menggunakan kembali generator jika Anda membutuhkan lebih dari satu uuid. Mungkin lebih jelas seperti ini:

#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;
}

1
Mengapa Anda harus menggunakan kembali generator? Apakah ini tip pengoptimalan kinerja atau keamanan?
Fred

5
Ini tidak akan menjadi ID unik universal yang sangat baik jika menggunakan generator baru menyebabkan masalah keunikan.
xaxxon

@xaxxon Apakah Anda memiliki dokumentasi tentang masalah keunikan saat membuat generator baru.
Saneesh kumar

2
@Saneeshkumar Ini adalah "pengenal unik universal" bukan "pengenal unik generator ini" karena suatu alasan.
xaxxon

1
Belajar dari saya dan buat untaian generator menjadi lokal. Mereka sangat mahal untuk benih
Yakobus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.