boost库uuid工具

uuid P161

  1. 可以自定义一个头文件来使用uuid组件

    //uuids.hpp 
    
    #include <boost/uuid/uuid.hpp>
    
    
    #include <boost/uuid/uuid_generators.hpp>
    
    
    #include <boost/uuid/uuid_io.hpp>
    
    using namespace boost::uuids;
    
    #include "uuids.hpp"
    
    using namespace boost::uuids;
    int main()
    {
        uuid u;          //声明一个uuid对象
        assert(uuid::static_size() == 16);     //uuid的长度总是16
        assert(u.size() == 16);
    
        vector<unsigned char> v(16,7);         //一个vector对象
        std::copy(v.begin(),v.end(),u.begin());  //使用标准拷贝算法
        assert(u.data[0] == u.data[1] && u.data[15] == 7);
    
        //流输出:07070707-0707-0707-070707070707
        cout<<u<<endl;
    
        std::fill_n(u.data+10, 6, 8);
        //流输出:07070707-0707-0707-080808080808
        cout<<u<<endl;
    }
  2. 生成器 P165

    • Nil生成器 -> 生成无效全零的UUID值
        uuid u = nil_generator()();     //注意有两个括号
        assert(u.is_nil());
    
        u = nil_uuid();
        assert(u.is_nil());
    • 字符串生成器 -> string_generator //对字符串格式有严格要求
        string_generator sgen;
    
        uuid u1 = sgen("0123456789abcdef0123456789abcdef");
        cout<<u1<<endl;
        uuid u2 = sgen("01234567-89ab-cdef-0123-456789abcdef");
        cout<<u1<<endl;
        uuid u3 = sgen(L"{01234567-89ab-cdef-0123-456789abcdef}");
        cout<<u3<<endl;
    • 名字生成器 -> name_generator //基于名字的SHA1摘要算法,需要指定基准UUID
        //首先生成一个组织的UUID
        uuid www_xxx_com = string_generator()("{0123456789abcdef0123456789abcdef}");
        name_generator ngen(www_xxx_com);
    
        uuid u1 = ngen("mario");      //为名字mario生成UUID
        assert(!u1.is_nil()&&         //version是sha1算法
            u1.version() == uuid::version_name_based_sha1);
        uuid u2 = ngen("link");       //为名字link生成UUID
        cout<<u2<<endl;
    • 随机生成器 -> basic_random_generator
        random_generator rgen;        //随机生成器
    
        uuid u = rgen();              //生成一个随机的UUID
        assert(u.version() == uuid::version_random_number_based);
        cout<<u<<endl;
  3. 增强的uuid类 P167

    using namespace boost::uuids;
    class uuid_t: public uuid
    {
    private:
        static random_generator rgen;                //随机数生成器
        static string_generator sgen;                //字符串生成器
    public:
        uuid_t(): uuid(rgen()){}                     //缺省构造函数,生成随机UUID
        uuid_t(int): uuid(nil_uuid()) {}             //0值的UUID构造函数
        uuid_t(const char* str): uuid(sgen(str)) {}  //字符串构造函数
        uuid_t(const uuid& u, const char* str):      //名字生成器构造函数
            uuid(name_generator(u)(str)) {}
        explicit uuid_t(const uuid& u): uuid(u){}    //拷贝构造函数
        operator uuid()                              //转换到uuid类型
        { return static_cast<uuid&>(*this); }
        operator uuid() const                        //常函数,转换到const uuid类型
        { return static_cast<const uuid&>(*this); }
    };
    random_generator uuid_t::rgen;                 //静态成员变量的定义
    string_generator uuid_t::sgen;
    
    
    //使用
    uuid_t u0 = 0;                                 //0值的UUID
    assert(u0.is_nil());
    
    uuid_t u1,u2;                                  //创建两个随机的UUID值
    cout<<u1<<endl;
    cout<<u2<<endl;
    
    uuid_t u3("{01234567-89ab-cdef-0123-456789abcdef}");  //字符串构造
    cout << u3 <<endl;
    
    cout<<uuid_t(u3,"test name gen")<<endl;        //通过名字构造
  4. 与字符串的转换

    
    #include <boost/lexical_cast.hpp>
    
    using namespace boost;
    using namespace boost::uuids;
    
    int main()
    {
        uuid u = lexical_cast<uuid>("01234567-89ab-cdef-0123-456789abcdef");
        cout<<u<<endl;
    
        string str = lexical_cast<string>(u);
        cout<<str<<endl;
    };
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值