在C++11中使用libuuid/uuid-dev

Using libuuid / uuid-dev with C++11

本文关键字:libuuid uuid-dev C++11      更新时间:2023-10-16

我希望将libuuid与C++11程序一起使用。然而,我想我可能对此做得不对。根据uuid.huuid_t是一个由16个项目组成的无符号字符数组(预期)。我用它构建std::string的方法如下:

uuid_t uuidObj;
uuid_generate(uuidObj);
std::string aString;
for (auto i = 0; i < 16; ++i)
{
   aString += uuidObj[i];
}

我知道这不是最合适的解决方案(同时避免C++11中的malloc,哎呀!),你们有什么建议吗?

您可以在构造函数本身中初始化字符串,将开始指针和结束指针作为迭代器传递。

uuid_t uuidObj;
uuid_generate(uuidObj);
std::string aString{ uuidObj, uuidObj + 16 };

Pragmatic Croissant也是正确的,您可以通过使用更为C++11的惯用语:来摆脱对数组大小的担忧

std::string aString{ std::begin(uuidObj), std::end(uuidObj) };

此外,问题中的代码只复制前15个字符。

在uuid dev 2.31.1中,它们提供了一个uuid_unparse函数。

uuid_t uuidObj;
char str[100];
uuid_generate(uuidObj);
uuid_unparse(uuidObj, str);
std::string _uuid{str};
std::cout << _uuid << std::endl;