網站首頁 編程語言 正文
一、說明
Boost.Uuid 為 UUID 提供生成器。 UUID 是不依賴于中央協調實例的通用唯一標識符。例如,沒有數據庫存儲所有生成的 UUID,可以檢查這些 UUID 是否使用了新的 UUID。
UUID 由必須唯一標識組件的分布式系統使用。例如,Microsoft 使用 UUID 來識別 COM 世界中的接口。對于為 COM 開發的新接口,可以輕松分配唯一標識符。
UUID 是 128 位數字。存在多種生成 UUID 的方法。例如,計算機的網絡地址可用于生成 UUID。 Boost.Uuid 提供的生成器基于隨機數生成器,以避免生成可以追溯到生成它們的計算機的 UUID。
Boost.Uuid 中的所有類和函數都在命名空間 boost::uuids 中定義。沒有主頭文件可以訪問所有這些文件。
二、Boost.Uuid庫示例和代碼
示例 65.1。使用 boost::uuids::random_generator 生成隨機 UUID
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <iostream>
using namespace boost::uuids;
int main()
{
random_generator gen;
uuid id = gen();
std::cout << id << '\n';
}
Example?65.1
示例 65.1 生成一個隨機的 UUID。它使用在 boost/uuid/uuid_generators.hpp 中定義的類 boost::uuids::random_generator。此頭文件提供對 Boost.Uuid 提供的所有生成器的訪問。
boost::uuids::random_generator 的使用方式類似于 C++11 標準庫或 Boost.Random 中的生成器。此類重載 operator() 以生成隨機 UUID。
UUID 的類型是 boost::uuids::uuid。 boost::uuids::uuid 是一個 POD – 普通的舊數據。沒有生成器,您無法創建 boost::uuids::uuid 類型的對象。但是,它是一種精確分配 128 位的精簡類型。該類在 boost/uuid/uuid.hpp 中定義。
boost::uuids::uuid 類型的對象可以寫入標準輸出流。但是,您必須包含 boost/uuid/uuid_io.hpp。此頭文件提供重載運算符以將 boost::uuids::uuid 類型的對象寫入輸出流。
示例 65.1 顯示如下所示的輸出:0cb6f61f-be68-5afc-8686-c52e3fc7a50d。使用破折號是顯示 UUID 的首選方式。
示例 65.2。 boost::uuids::uuid 的成員函數
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <iostream>
using namespace boost::uuids;
int main()
{
random_generator gen;
uuid id = gen();
std::cout << id.size() << '\n';
std::cout << std::boolalpha << id.is_nil() << '\n';
std::cout << id.variant() << '\n';
std::cout << id.version() << '\n';
}
boost::uuids::uuid 只提供了幾個成員函數,其中一些在示例 65.2 中有介紹。 size() 以字節為單位返回 UUID 的大小。因為 UUID 總是 128 位,所以 size() 總是返回 16。如果 UUID 是 nil UUID,is_nil() 返回 true。零 UUID 是 00000000-0000-0000-0000-000000000000。 variant() 和 version() 指定 UUID 的種類及其生成方式。在示例 65.2 中,variant() 返回 1,這意味著 UUID 符合 RFC 4122。version() 返回 4,這意味著 UUID 是由隨機數生成器創建的。
boost::uuids::uuid 還提供成員函數,如 begin()、end() 和 swap()。
示例 65.3。來自 Boost.Uuid 的生成器
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <iostream>
using namespace boost::uuids;
int main()
{
nil_generator nil_gen;
uuid id = nil_gen();
std::cout << std::boolalpha << id.is_nil() << '\n';
string_generator string_gen;
id = string_gen("CF77C981-F61B-7817-10FF-D916FCC3EAA4");
std::cout << id.variant() << '\n';
name_generator name_gen(id);
std::cout << name_gen("theboostcpplibraries.com") << '\n';
}
Example?65.3
示例 65.3 包含更多來自 Boost.Uuid 的生成器。 nil_generator 生成一個 nil UUID。 is_nil() 僅在 UUID 為 nil 時返回 true。
如果您想使用現有的 UUID,請使用 string_generator。您可以在在線 UUID 生成器工具等網站上生成 UUID。對于示例 65.3 中的 UUID,variant() 返回 0,這意味著 UUID 符合向后兼容的 NCS 標準。 name_generator 用于在命名空間中生成 UUID。
使用 string_generator 時請注意 UUID 的拼寫。您可以傳遞不帶破折號的 UUID,但如果您使用破折號,則它們必須位于正確的位置。忽略大小寫(大寫或小寫)。
示例 65.4。轉換為字符串
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>
using namespace boost::uuids;
int main()
{
random_generator gen;
uuid id = gen();
std::string s = to_string(id);
std::cout << s << '\n';
std::cout << boost::lexical_cast<std::string>(id) << '\n';
}
Boost.Uuid 提供函數 boost::uuids::to_string() 和 boost::uuids::to_wstring() 將 UUID 轉換為字符串(參見示例 65.4)。也可以使用 boost::lexical_cast() 進行轉換。
原文鏈接:https://yamagota.blog.csdn.net/article/details/128159975
相關推薦
- 2022-10-20 Flutter實現矩形取色器的封裝_Android
- 2022-02-11 Command line is too long. Shorten command line for
- 2022-03-26 C語言的字符函數和字符串函數詳解_C 語言
- 2022-12-29 R語言apply系列函數實例詳解_R語言
- 2024-02-17 阻塞IO、非阻塞IO、IO多路復用、AIO的區別
- 2022-07-08 python使用IPython調試debug程序_python
- 2022-04-22 Element UI 表格操作列按鈕顯示不全
- 2023-02-04 python?配置uwsgi?啟動Django框架的詳細教程_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支