标签: boost-uuid

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

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

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

c++ uuid boost boost-uuid

90
推荐指数
2
解决办法
7万
查看次数

boost :: uuids :: random_generator和多线程的唯一性

当我使用单线程生成随机数时,4M uuids中没有重复生成,但如果我生成两个线程,每个1M,我看到大约16-20个重复.可能是什么原因?

class TestUuid 
{
 public:
  std::string GenerateUUid(){
       boost::uuids::uuid uid;
       {
          boost::mutex::scoped_lock(m_mRandomGen);
          uid = m_oRandomGen();
       }
       std::stringstream ss;
       ss << uid;
       return ss.str();
  }


  void TestUid(std::map<std::string, unsigned>& mUids, unsigned count){  
    for(unsigned i = 0; i < count; ++i) {
        std::string sUid = GenerateUUid();
        std::map<std::string, unsigned>::const_iterator it = mUids.find(sUid);           
        if(it == mUids.end()){
           mUids[sUid] = i;
        }else {
         std::cerr << "Duplicate uid:" << sUid << " found in  thread id:" << pthread_self() << ", counter:" << i << ", earlier counter:" << …
Run Code Online (Sandbox Code Playgroud)

c++ boost thread-safety boost-uuid

8
推荐指数
1
解决办法
3425
查看次数

boost :: uuids :: uuid作为std :: unordered_map中的键?

我在Mac OS X上使用clang(CXX ='clang ++ -std = c ++ 11 -stdlib = libc ++'),增强1.53.0.

我想在unordered_map中使用uuid作为键,但是会出现以下错误:

/usr/bin/../lib/c++/v1/type_traits:748:38: error: implicit instantiation of undefined template
      'std::__1::hash<boost::uuids::uuid>'
    : public integral_constant<bool, __is_empty(_Tp)> {};
                                 ^
/usr/bin/../lib/c++/v1/unordered_map:327:54: note: in instantiation of template class
      'std::__1::is_empty<std::__1::hash<boost::uuids::uuid> >' requested here
template <class _Key, class _Tp, class _Hash, bool = is_empty<_Hash>::value
Run Code Online (Sandbox Code Playgroud)

...

/usr/bin/../lib/c++/v1/unordered_map:327:71: error: no member named 'value' in
      'std::__1::is_empty<std::__1::hash<boost::uuids::uuid> >'
template <class _Key, class _Tp, class _Hash, bool = is_empty<_Hash>::value
                                                     ~~~~~~~~~~~~~~~~~^
Run Code Online (Sandbox Code Playgroud)

...

它是什么 - Boost中的一个错误,它使它与我的C++ lib不兼容?或者我做错了什么?任何解决方法?

c++ boost clang boost-uuid

7
推荐指数
1
解决办法
4461
查看次数

boost :: uuids :: random_generator线程安全吗?

考虑使用g++ -std=c++11(GCC 4.7.2)编译此函数:

boost::uuids::uuid getID()
{
    static boost::uuids::random_generator generator;
    return generator();
}
Run Code Online (Sandbox Code Playgroud)

getID从多个线程调用安全吗?

正如提到这里的局部静态对象定义在所述第一线是根据C ++ 11标准线程安全的。问题是,第二行boost::uuids::random_generator::operator()对同一对象的调用generator是否也是线程安全的。返回的UUID在单个线程中是否唯一?

c++ boost-random boost-uuid c++11 gcc4.7

6
推荐指数
1
解决办法
1937
查看次数

检查std :: string是否是使用boost的有效uuid

我想检查给定的字符串是否是使用boost的有效UUID.

这是我通过查看boost网站上的文档得出的:

void validate_uuid(const std::string& value)
{
    try
    {
        boost::uuids::string_generator stringGenerator;
        (void)stringGenerator(value);
    }

    catch (const std::exception& ex)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这并不总是有效.

如果我使用对于有效UUID而言太短的字符串调用该函数,则会按预期抛出异常.但是如果我用无效的UUID调用该函数(例如00000000-0000-0000-0000-00000000000K),则不会抛出任何异常.

有人可以澄清为什么会这样.

另外,我已经看到使用boost :: lexical_cast将字符串读取为此处发布的UUID .我想知道我是否应该采用这种方法.任何建议表示赞赏

c++ uuid boost boost-uuid

6
推荐指数
2
解决办法
3087
查看次数

string来提升:: uuid转换

我刚刚开始在c ++中使用boost,我只想问一些与uuids有关的问题.

我正在加载一个文件,要求我知道uuids所以我可以将一些对象链接在一起.出于这个原因,我正在尝试编写自己的uuids,但我不确定字符串是否有任何特殊条件,因为我一直在使用的字符串(通常是基本字符串)不起作用.谁能指出我正确的方向?我已经尝试过使用字符串生成器,但到目前为止无济于事,所以我假设我的字符串出现了问题(目前只是随机字样).

这是一个简短的例子,不能给出真正的代码:

void loadFiles(std::string xmlFile);

void linkObjects(custObj network)
{
    for (int i = 0; i < network->getLength(); i++)
    {
        network[i]->setId([boost::uuid]);  
        if (i > 0)
            network[i]->addObj(network[i-1]->getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

string boost boost-uuid

5
推荐指数
1
解决办法
6745
查看次数

使用boost :: lexical_cast将UUID转换为字符串时出现编译错误

我有这个代码基于SO中的几个帖子:

boost::uuids::uuid uuid = boost::uuids::random_generator()();
auto uuidString= boost::lexical_cast<std::string>(uuid);
Run Code Online (Sandbox Code Playgroud)

但是当我编译这段代码时,我收到了这个错误:

Source type is neither std::ostream`able nor std::wostream`able     C:\Local\boost\boost\lexical_cast\detail\converter_lexical.hpp  
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

c++ uuid boost lexical-cast boost-uuid

5
推荐指数
1
解决办法
1809
查看次数

当我使用Boost UUID时,为什么我会从Valgrind获得未初始化的值警告?

我有一个成员班:

std::string mName;
boost::uuids::uuid mId;
Run Code Online (Sandbox Code Playgroud)

在我写的构造函数中:

mName = boost::lexical_cast<std::string>(mId);
Run Code Online (Sandbox Code Playgroud)

Valgrind写道:

==30714== Use of uninitialised value of size 8
==30714==    at 0x69E92FC: ??? (in /usr/lib/libstdc++.so.6.0.16)
==30714==    by 0x69E93EE: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<unsigned long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, unsigned long) const (in /usr/lib/libstdc++.so.6.0.16)
==30714==    by 0x69E9705: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, unsigned long) const (in /usr/lib/libstdc++.so.6.0.16)
==30714==    by 0x69F522C: std::ostream& std::ostream::_M_insert<unsigned long>(unsigned long) (in /usr/lib/libstdc++.so.6.0.16)
==30714==    by 0x6283A5: std::basic_ostream<char, std::char_traits<char> >& boost::uuids::operator<< <char, std::char_traits<char> …
Run Code Online (Sandbox Code Playgroud)

c++ boost valgrind boost-uuid

5
推荐指数
1
解决办法
2518
查看次数

如何序列化boost :: uuid与谷类食品

尝试序列化此简单类:

class Data
{
public:
    Data();
    Data(boost::uuids::uuid id);

    Data(const Data&) = delete;
    Data& operator=(const Data&) = delete;

    inline boost::uuids::uuid getGuid() { return guid; }

    template <class Archive>
    void serialize(Archive & ar)
    {
        ar(guid);
    }

private:
    boost::uuids::uuid guid;
};
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息

error C2338: Trying to serialize an unserializable type with an output archive. 
Run Code Online (Sandbox Code Playgroud)

潜伏到uuid。实现此目的的Boost序列化方法是添加

#include <boost/uuid/uuid_serialize.hpp>
Run Code Online (Sandbox Code Playgroud)

但这不适用于开箱即用的谷物。谷物文件说

谷物存档在std :: ostream或std :: istream对象上运行。

所以我尝试在已定义但没有运气的地方添加标题

#include <boost/uuid/uuid_io.hpp>
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-uuid cereal

3
推荐指数
1
解决办法
644
查看次数

假设boost :: uuid不会返回副本是否安全?

我正在使用boost uuid来生成会话ID.

std::string SessionGenerator::generate()
{
    boost::uuids::uuid id = m_rgen();
    m_ss.clear();
    m_ss.str("");
    m_ss << id;

    return m_ss.str();
}
Run Code Online (Sandbox Code Playgroud)

假设我永远不会得到重复或者我应该对活动会话进行检查是否安全?

谢谢

c++ uuid boost boost-uuid

2
推荐指数
1
解决办法
4717
查看次数