Ví dụ về tạo UUID bằng cách sử dụng Boost trong C ++


94

Tôi chỉ muốn tạo UUID ngẫu nhiên, vì điều quan trọng là các phiên bản trong chương trình của tôi phải có số nhận dạng duy nhất. Tôi đã xem xét Boost UUID , nhưng tôi không thể tạo UUID vì tôi không hiểu lớp và phương thức nào sẽ sử dụng.

Tôi sẽ đánh giá cao nếu ai đó có thể cho tôi bất kỳ ví dụ nào về cách đạt được điều này.

Câu trả lời:


164

Một ví dụ cơ bản:

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

Ví dụ đầu ra:

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


4
Và bạn sẽ gán nó vào một chuỗi như thế nào? Vì tôi có một cơ sở chung cho mọi trường hợp và tôi sẽ cần phải nối UUID với một cơ sở. Cảm ơn một lần nữa!
Nikola

22
@nik: Sử dụng hỗ trợ phát trực tuyến - có một stringstreamví dụ. Hoặc để boost::lexical_cast<std::string>(uuid)làm điều đó cho bạn.
Georg Fritzsche

15
Đối với các tham số kép: Đầu tiên xây dựng một thể hiện của random_generator, thứ hai sử dụng operator()trên thể hiện đó. Bạn nên lưu các máy phát điện và gọi operator()vào nó nếu bạn muốn tạo ra nhiều hơn một uuid:random_generator rg; uuid ui = rg();
Georg Fritzsche

34
@Nikola: sử dụng boost :: uuids :: to_string (uuid) để xâu chuỗi uuids
King

2
@GeorgFritzsche Cùng với nhau, thời gian chính xác và địa chỉ mạng riêng lẻ của máy là duy nhất. Tôi mặc dù vậy nó có thể là chìa khóa tốt cho hàm băm. Tôi không cần những giá trị rõ ràng sau này. Nhưng ý tưởng của bạn đã mang lại cho tôi một ý tưởng. Có thể tốt khi sử dụng thời gian và địa chỉ mạng làm nguồn gốc cho trình tạo số ngẫu nhiên hoặc tương tự.
danijar

34

Câu trả lời của Georg Fritzsche là ok nhưng có thể hơi sai lệch. Bạn nên sử dụng lại máy phát điện nếu bạn cần nhiều hơn một uuid. Có lẽ nó rõ ràng hơn theo cách này:

#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
Tại sao bạn nên sử dụng lại máy phát điện? Đây là một tối ưu hóa hiệu suất hay một mẹo an toàn?
Fred

5
Nó sẽ không phải là một ID duy nhất trên toàn cầu rất tốt nếu việc sử dụng một trình tạo mới gây ra các vấn đề về tính duy nhất.
xaxxon

@xaxxon Bạn có tài liệu nào về vấn đề tính duy nhất khi tạo trình tạo mới không.
Saneesh kumar,

1
@Saneeshkumar Đó là "số nhận dạng duy nhất trên toàn cầu" không phải là "số nhận dạng duy nhất của trình tạo này" vì một lý do.
xaxxon

1
Học hỏi từ tôi và làm cho bộ tạo chuỗi cục bộ. Hạt giống rất đắt
James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.