使用libuuid/uuid-dev和C++ 11

jac*_*ine 2 c++ c++11

我希望使用libuuidC++ 11程序.但是,我想我可能会错误地解决这个问题.根据uuid.h,uuid_t是一个16个项目(预期)的unsigned char数组.我建立一个std::string这样的方法如下:

uuid_t uuidObj;
uuid_generate(uuidObj);
std::string aString;

for (auto i = 0; i < 16; ++i)
{
   aString += uuidObj[i];
}
Run Code Online (Sandbox Code Playgroud)

我知道这不是最合适的解决方案(同时避免malloc在C++ 11中使用yikes!),来自你们的任何提示?

Dre*_*ann 6

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

uuid_t uuidObj;
uuid_generate(uuidObj);
std::string aString{ uuidObj, uuidObj + 16 };
Run Code Online (Sandbox Code Playgroud)

实用的羊角面包也是正确的,你可以通过使用更多的C++ 11惯用来解放数组大小:

std::string aString{ std::begin(uuidObj), std::end(uuidObj) };
Run Code Online (Sandbox Code Playgroud)

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

  • 德鲁,为什么不``std :: begin()`和`std :: end()`?这比硬编码魔法数字更强大...... (3认同)