Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top