2010-07-14 67 views
73

我想生成隨機的UUID,因爲它對我的程序中的實例具有唯一標識符非常重要。我看着Boost UUID,但我無法設法生成UUID,因爲我不明白要使用哪個類和方法。在C++中使用Boost生成UUID的示例

如果有人能給我任何如何實現這個目標的例子,我將不勝感激。

回答

129

一個基本的例子:

#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; 
} 

輸出示例:

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

+0

謝謝!我被兩對括號所困惑:) – Nikola 2010-07-15 16:04:27

+3

你會如何將它分配給一個字符串?因爲我對每個實例都有一個公共基礎,所以我需要將UUID連接到基礎。再次感謝! – Nikola 2010-07-15 16:34:21

+20

@nik:使用[流支持](http://www.boost.org/doc/libs/1_43_0/libs/uuid/uuid.html#boost/uuid/uuid_io.hpp) - 有一個'stringstream'例。或者讓'boost :: lexical_cast (uuid)'爲你做。 – 2010-07-15 16:41:00

15

喬治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; 
} 
+0

爲什麼要重新使用發生器?這是性能優化還是安全提示? – Fred 2015-09-16 00:03:04

+2

性能 – Nikko 2015-09-16 07:46:56

+2

如果使用新的生成器會導致唯一性問題,那麼這將不是一個非常好的通用唯一ID。 – xaxxon 2016-09-16 00:45:47