eine boost.uuid aus einer Zeichenfolge erzeugen boost.path
-
11-10-2019 - |
Frage
Ich arbeite in einem Manager-Klasse, die Zeichenfolge, die Pfade hält. Aus diesen Strings, würde Ich mag ein boost.uuid wie diese mit einem Code haben:
m_log->addMessage("Generating UUID from path",ZEL_APPENDER,LOGLEVEL_DEBUG);
boost::uuids::string_generator str_gen;
boost::uuids::uuid generatedUUID = str_gen(full_path);
assert(generatedUUID.is_nil() == false);
char msg[500];
snprintf(msg,500,"Successfully generated UUID %s from path",boost::uuids::to_string(generatedUUID).c_str());
m_log->addMessage(msg,ZEL_APPENDER,LOGLEVEL_DEBUG);
Aber leider fand ich, dass generierte Zeichenfolge ist immer die gleiche, auch wenn full_path diferent ist.
Auch wenn ich versuche, mit einem ultra einfaches Beispiel wie folgt aus:
string s1("helloworld");
boost::uuids::string_generator str_gen;
boost::uuids::uuid generatedUUID = str_gen(s1);
cout << "s1: " << boost::uuids::to_string(generatedUUID) << endl;
-Boost wirft eine Laufzeitausnahme sagen, dass Zeichenfolge ungültig ist. Kannst du mir helfen? Die einzige Quelle der Dokumentation ich gefunden habe, ist hier
Vielen Dank im Voraus.
Lösung
Basierend auf dem Code im Header die Code nicht generiert Hashes , sondern parst ein UUID-as-string und wandelt es in eine UUID.
Es klingt wie Sie für einen Hash suchen basierend auf dem Weg, der nicht das gleiche wie ein UUID ist. UUIDs sollen eindeutig sein, was bedeutet, dass z.B. ein Pfad mit dem gleichen Wert in einem assoziativen Behälter unter verschiedenen UUID gespeichert haben könnte.
Das könnte Sie besser dran Blick auf Boost.Hash .
Andere Tipps
Ich denke, man sollte lesen http://www.boost.org/doc/libs/1_59_0/libs/uuid/uuid.html#boost/uuid/string_generator.hpp sorgfältig. Sie verwenden String Generator
, aber in Artikel Die boost::uuids::string_generator
Klasse erzeugt eine uuid
aus einem String.
wenn Sie verwenden boost::uuids::string_generator
möchten, müssen Sie verwenden
korrektes Format-String in Ihrem gen()
.