1

私は、パスを表す文字列を保持するマネージャー クラスで作業しています。この文字列から、次のようなコードを使用して 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 は、文字列が無効であることを示す実行時例外をスローします。私たちを手伝ってくれますか?私が見つけたドキュメントの唯一のソースはここにあります

前もって感謝します。

4

2 に答える 2

4

ヘッダー内のコードに基づいて、コードはハッシュを生成しませんが、代わりに文字列としての UUIDを解析し、uuid に変換します。

パスに基づいてハッシュを探しているようですが、これは UUID とは異なります。UUID は一意であることを意図しており、たとえば、異なる UUID の下の連想コンテナーに格納された同じ値のパスを持つことができることを意味します。

Boost.Hashを見たほうがいいかもしれません。

于 2010-12-17T22:58:55.790 に答える
0

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()

于 2016-01-05T03:10:25.423 に答える