设为首页 加入收藏

TOP

4.10.4 增强的uuid类
2013-10-07 15:02:04 来源: 作者: 【 】 浏览:69
Tags:4.10.4 增强 uuid

4.10.4  增强的uuid类

uuid类为了追求效率而没有提供构造函数,要生成一个UUID值必须要使用生成器。但有的时候这个操作步骤显得有些麻烦,因此我们可以从uuid类派生一个可以自动产生UUID值的增强类,以简化UUID的使用。

下面的代码实现了这个增强类uuid_t,它是uuid的子类,因而具有uuid的全部能力。它在内部定义了两个生成器的静态成员变量 ,分别用来产生随机UUID和字符串UUID,对应地也提供了两种重载形式的构造函数。对于Nil生成器,uuid_t使用带int参数的构造函数来调用实现,而名字生成器则使用了接受uuid和字符串参数的构造函数。

uuid_t还实现了两个类型转换操作符重载,可以隐式地转换成uuid对象,方便被应用在其他使用uuid类型的场景。

uuid_t的全部实现代码如下:

  1. using namespace boost::uuids;  
  2. class uuid_t : public uuid  
  3. {  
  4. private:  
  5.     static random_generator rgen;                   //随机生成器  
  6.     static string_generator sgen;                   //字符串生成器  
  7. public:  
  8.     uuid_t(): uuid(rgen()){}                        //缺省构造函数,生成随机UUID  
  9.     uuid_t(int): uuid(nil_uuid()){}                 //0值的UUID构造函数  
  10.     uuid_t(const char* str): uuid(sgen(str)) {} //字符串构造函数  
  11.     uuid_t(const uuid& u, const char* str):         //名字生成器构造函数  
  12.         uuid(name_generator(u)(str))    {}  
  13.     explicit uuid_t(const uuid& u): uuid(u){}       //拷贝构造函数  
  14.     operator uuid()                                 //转换到uuid类型  
  15.     {   return static_cast<uuid&>(*this);   }  
  16.     operator uuid() const                           //常函数,转换到const uuid类型  
  17.     {   return static_cast< const uuid&>(*this);    }  
  18. };  
  19. random_generator uuid_t::rgen;                  //静态成员变量的定义  
  20. string_generator uuid_t::sgen;  

由于uuid_t类封装了uuid的所有生成器,故它比uuid用起来更加方便容易,例如:

  1. uuid_t u0 = 0;                                  //0值的UUID  
  2. assert(u0.is_nil());  
  3.  
  4. uuid_t u1,u2;                                           //创建两个随机UUID值  
  5. cout << u1 << endl;  
  6. cout << u2 << endl;  
  7.  
  8. uuid_t u3("{01234567-89ab-cdef-0123-456789abcdef}");    //字符串构造  
  9. cout << u3 << endl;  
  10.  
  11. cout << uuid_t(u3, "test name gen") << endl;            //通过名字构造  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.11.3 禁止编译器警告 下一篇4.10.3 生成器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: