我正在阅读有关Boost UUID的内容。我知道有多种生成UUID的方法,这由UUID的版本字段决定。 This document显示了5个不同版本的UUID。 Boost UUID API允许您查询UUID的版本。但是如何设置版本? Boost documentation page仅显示创建UUID的一种方法,如下所示 -
The attribute 'classes' is undefined for the annotation type ContextConfiguration
那么,您能否告诉我如何基于其他4个版本生成UUID?特别是版本1,即基于时间的发生器对我来说似乎很有趣。
另外,您能否告诉我UUID版本与其变体有何不同?它们听起来都是一样的。
答案 0 :(得分:1)
我之前从未使用过Boost的Uuid库,但是我对代码进行了一些考虑,看起来似乎version
的{{1}}和variant
基于您使用uuid
。
有多种生成器,例如random_generator
和name_generator
。每个生成器都有自己的generator
和version
值,它会注入到variant
中。
这直接来自源代码,请注意两个生成器的变体和版本是如何不同的。
uuid
// set variant
// must be 0b10xxxxxx
*(u.begin()+8) &= 0xBF;
*(u.begin()+8) |= 0x80;
// set version
// must be 0b0100xxxx
*(u.begin()+6) &= 0x4F; //0b01001111
*(u.begin()+6) |= 0x40; //0b01000000