質問

私はパスを表す文字列を保持しているマネージャークラスで働いています。この文字列から、このようなコードを使用して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;

ブーストは、文字列が無効であると言って、ランタイム例外をスローします。私たちを手伝ってくれますか?私が見つけたドキュメントの唯一のソースはです ここ

前もって感謝します。

役に立ちましたか?

解決

に基づく ヘッダーのコード コードは生成されません ハッシュ しかし、代わりにaを解析します uuid-as-string そして、それをuuidに変換します。

パスに基づいてハッシュを探しているように聞こえますが、これはUUIDと同じではありません。 UUIDはユニークであることを意図しており、例えば、異なる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 クラスはaを生成します uuid 文字列から。使用したい場合 boost::uuids::string_generator、正しいフォーマット文字列を使用する必要があります gen().

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top