Генерировать boost.uuid из строки boost.path

Я работаю в классе менеджера, который содержит строку, представляющую пути. Из этой строки я хотел бы получить 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 генерирует исключение времени выполнения, сообщающее, что строка недопустима. Не могли бы вы помочь мне? Единственный источник документации, который я нашел, здесь

Заранее спасибо.

2 ответа

Решение

Основываясь на коде в заголовке, код не генерирует хэши, а анализирует UUID-as-string и преобразует его в uuid.

Похоже, вы ищете хеш на основе пути, который не совпадает с UUID. UUID предназначены для того, чтобы быть уникальными, подразумевая, что, например, можно иметь пути одного и того же значения, хранящиеся в ассоциативном контейнере под разными UUID.

Возможно, вам лучше смотреть на Boost.Hash.

Я думаю, что вы должны внимательно прочитать http://www.boost.org/doc/libs/1_59_0/libs/uuid/uuid.html. Ты используешь String Generator, но в статье boost::uuids::string_generator класс генерирует uuid из строки если вы хотите использовать boost::uuids::string_generator, вы должны использовать правильную строку формата в вашем gen(),

Другие вопросы по тегам