在C++中使用Boost生成UUID的示例

Nik*_*ola 90 c++ uuid boost boost-uuid

我想生成随机的UUID,因为对于我的程序中的实例而言,它具有唯一标识符非常重要.我查看了Boost UUID,但我无法生成UUID,因为我不明白要使用哪个类和方法.

如果有人能给我任何如何实现这一目标的例子,我将不胜感激.

Geo*_*che 154

一个基本的例子:

#include <boost/uuid/uuid.hpp>            // uuid class
#include <boost/uuid/uuid_generators.hpp> // generators
#include <boost/uuid/uuid_io.hpp>         // streaming operators etc.

int main() {
    boost::uuids::uuid uuid = boost::uuids::random_generator()();
    std::cout << uuid << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

7feb24af-fc38-44de-bc38-04defc3804de

  • @Nikola:使用boost :: uuids :: to_string(uuid)来表示uuids (29认同)
  • @nik:使用[流媒体支持](http://www.boost.org/doc/libs/1_43_0/libs/uuid/uuid.html#boost/uuid/uuid_io.hpp) - 有一个`stringstream`示例.或者让`boost :: lexical_cast <std :: string>(uuid)`为你做这件事. (22认同)
  • 至于双重parantheses:第一个构造一个`random_generator`的实例,第二个在该实例上使用`operator()`.如果你想生成多个uuid,你应该保存生成器并在其上调用`operator()`:`random_generator rg; uuid ui = rg();` (14认同)
  • 你会如何将它分配给一个字符串?因为我有每个实例的共同基础,我需要将UUID连接到基础.再次感谢! (4认同)
  • @GeorgFritzsche在一起,确切的时间和机器的个人网络地址是唯一的.因此,我可能是哈希函数的好关键.我以后不需要明确的值.但是你的想法给我带来了一个想法.将时间和网络地址用作随机数生成器的种子可能是一件好事. (2认同)

Nik*_*kko 30

Georg Fritzsche的答案还可以,但可能有点误导.如果您需要多个uuid,则应重复使用该生成器.也许这样更清楚:

#include <iostream>

#include <boost/uuid/uuid.hpp>            // uuid class
#include <boost/uuid/uuid_generators.hpp> // generators
#include <boost/uuid/uuid_io.hpp>         // streaming operators etc.


int main()
{
    boost::uuids::random_generator generator;

    boost::uuids::uuid uuid1 = generator();
    std::cout << uuid1 << std::endl;

    boost::uuids::uuid uuid2 = generator();
    std::cout << uuid2 << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果使用新的发电机导致唯一性问题,那将不是一个非常好的通用唯一ID. (4认同)
  • @Saneeshkumar 出于某种原因,它是“通用唯一标识符”而不是“此生成器唯一标识符”。 (2认同)
  • 向我学习,使生成器线程本地化。它们的种子非常昂贵 (2认同)
  • 官方文档仅鼓励出于性能考虑而重用 random_generator,而不是出于安全考虑。“根据平台的不同,初始化生成器可能会产生设置成本,因此如果可以的话,请计划重用它”_来源_:[Boost uuid 1.70.0](https://www.boost.org/doc/libs/1_70_0/ libs/uuid/doc/uuid.html#Synopsis_random_generator) (2认同)