我希望将libuuid
与C++11程序一起使用。然而,我想我可能对此做得不对。根据uuid.h
,uuid_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;