57 votes

Indépendant de la plate-GUID génération en C++?

Quel est le meilleur moyen de faire générer un GUID UUID ou en C++ sans s'appuyer sur une plate-forme spécifique de l'outil? Je suis en train de faire des identificateurs uniques pour les objets dans une simulation, mais ne peut pas compter sur le Microsoft de la mise en œuvre du projet de la croix-plate-forme.

Notes:

  • Depuis que c'est pour un simulateur, je n'avez pas vraiment besoin de chiffrement l'aléatoire.
  • Il serait mieux si c'est un 32 bits.

47voto

Anonymous Points 11017

Si vous pouvez vous permettre d'utiliser Boost, alors il existe un UUID de la bibliothèque qui devrait faire l'affaire. C'est très simple à utiliser, consultez la documentation et de cette réponse.

40voto

ubik Points 223

sur linux: l'homme uuid

à gagner: départ pour l'UUID de la structure et de la UuidCreate fonction dans msdn

[modifier] la fonction apparaître comme ceci

extern "C"
{
#ifdef WIN32
#include <Rpc.h>
#else
#include <uuid/uuid.h>
#endif
}

std::string newUUID()
{
#ifdef WIN32
    UUID uuid;
    UuidCreate ( &uuid );

    unsigned char * str;
    UuidToStringA ( &uuid, &str );

    std::string s( ( char* ) str );

    RpcStringFreeA ( &str );
#else
    uuid_t uuid;
    uuid_generate_random ( uuid );
    char s[37];
    uuid_unparse ( uuid, s );
#endif
    return s;
}

15voto

Graeme Hill Points 304

Si vous ne pouvez pas se permettre d'utiliser Boost, alors il est très minime de la bibliothèque que j'ai mis en place qui agit comme un wrapper autour de chaque système d'exploitation natif de guid de mise en œuvre. Il devrait fonctionner sur Windows (à l'aide d' CoCreateGuid), Linux (à l'aide d' libuuid), MacOS (à l'aide d' CFUUID), iOS (également à l'aide de CFUUID) et Android (en utilisant JNI appels d' java.util.UUID). Le guid de la génération de la fonction de la mise en œuvre différente sur chaque système, mais il est le seul générique de mise en œuvre pour la comparaison, la stringifying, et de l'analyse.

Il est sous licence MIT et disponible sur GitHub:

https://github.com/graeme-hill/crossguid

2voto

ShuggyCoUk Points 24204

Tout simplement en utilisant tous les guid/uuid est présent sur la plate-forme cible est le meilleur. Pour ce faire, il est dur (let's go shopping ;)).

La probabilité de collision entre deux identificateurs de différent, mais bien exécuté, les implémentations doivent être bien au-delà de toute possibilité raisonnable de passe dans cet univers de vie.

1voto

shoosh Points 34322

Un générateur de GUID généralement s'appuie sur les caractéristiques matérielles de la machine, généralement des choses comme les adresses MAC ou Ip. La seule chose que vous pouvez faire qui est absolument indépendante de la plateforme est d'utiliser une sorte de GÉNÉRATEUR graines manuellement ou ensemencés à partir d'un certain temps la source. Ce n'est généralement pas générer un vrai identificateur global unique dans le sens que vous avez la garantie que personne dans le monde génère le même nombre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X