генерировать Boost.Uuid из строки Boost.path
-
11-10-2019 - |
Вопрос
Я работаю в классе менеджера, который содержит строку, представляющие пути. Из этих струн я хотел бы иметь Boost.Uuid, используя такой код:
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);
Но, к сожалению, я обнаружил, что сгенерированная строка всегда одинакова, даже если Full_Path отличается.
Кроме того, когда я пытаюсь с ультра -простым примером, таким как это:
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 бросает исключение времени выполнения, говоря, что строка недействительна. Не могли бы вы помочь мне? Единственный источник документации, который я нашел здесь
Заранее спасибо.
Решение
На основе код в заголовке Код не генерирует хэши но вместо этого Uuid-as-String и преобразует его в UUID.
Похоже, вы ищете хэш на основе пути, который не совпадает с UUID. Uuids предназначены для того, чтобы быть уникальным, подразумевая, что, например, можно было бы иметь пути одного и того же значения, хранящегося в ассоциативном контейнере под разными UUID.
Вам может быть лучше взглянуть на Boost.hash.
Другие советы
Я думаю, ты должен читать http://www.boost.org/doc/libs/1_59_0/libs/uuid/uuid.html#boost/uuid/string_generator.hpp осторожно. Ты используешь String Generator
, но в статье boost::uuids::string_generator
Класс генерирует uuid
из строки. Если вы хотите использовать boost::uuids::string_generator
, вы должны использовать правильную строку формата в вашем gen()
.