Как я могу сгенерировать UUID в С++ без использования библиотеки boost?

Я хочу сгенерировать UUID для моего приложения, чтобы различать каждую установку моего приложения. Я хочу сгенерировать этот UUID с помощью С++ без поддержки библиотеки boost. Как я могу сгенерировать UUID с помощью другой библиотеки open source?

Примечание. Моя платформа - это окна

Ответ 1

Как упоминалось в комментариях, вы можете использовать UuidCreate

#pragma comment(lib, "rpcrt4.lib")  // UuidCreate - Minimum supported OS Win 2000
#include <windows.h>
#include <iostream>

using namespace std;

int main()
{
    UUID uuid;
    UuidCreate(&uuid);
    char *str;
    UuidToStringA(&uuid, (RPC_CSTR*)&str);
    cout<<str<<endl;
    RpcStringFreeA((RPC_CSTR*)&str);
    return 0;
}

Ответ 2

Библиотека ossp-uuid может генерировать UUID и имеет привязки С++.

Кажется чрезвычайно простым в использовании:

#include <uuid++.hh>
#include <iostream>

using namespace std;

int main() {
        uuid id;
        id.make(UUID_MAKE_V1);
        const char* myId = id.string();
        cout << myId << endl;
        delete myId;
}

Обратите внимание, что он выделяет и возвращает строку C-стиля, которую вызывающий код должен освободить, чтобы избежать утечки.

Другая возможность - libuuid, которая является частью пакета util-linux, доступного из ftp://ftp.kernel.org/pub/linux/utils/util-linux/. Любой Linux-компьютер уже установит его. У него нет С++ API, но он по-прежнему может быть вызван из С++ с использованием API C.

Ответ 3

Традиционно UUID - это просто MAC-адрес машины, объединенный с числом 100-наносекундных интервалов с момента принятия григорианского календаря на Западе. Так что не сложно написать С++ class, который сделает это для вас.

Ответ 4

Если вы просто хотите что-то случайное, я написал эту маленькую функцию:

string get_uuid() {
    static random_device dev;
    static mt19937 rng(dev());

    uniform_int_distribution<int> dist(0, 15);

    const char *v = "0123456789abcdef";
    const bool dash[] = { 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 };

    string res;
    for (int i = 0; i < 16; i++) {
        if (dash[i]) res += "-";
        res += v[dist(rng)];
        res += v[dist(rng)];
    }
    return res;
}