使用boost :: lexical_cast将UUID转换为字符串时出现编译错误

时间:2015-04-14 15:12:08

标签: c++ boost uuid lexical-cast boost-uuid

我的代码基于SO中的几个帖子:

boost::uuids::uuid uuid = boost::uuids::random_generator()();
auto uuidString= boost::lexical_cast<std::string>(uuid);

但是当我编译这段代码时,我收到了这个错误:

Source type is neither std::ostream`able nor std::wostream`able     C:\Local\boost\boost\lexical_cast\detail\converter_lexical.hpp  

如何解决此错误?

2 个答案:

答案 0 :(得分:8)

你想错过了包含,我想:

<强> Live On Coliru

#include <boost/lexical_cast.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/random_generator.hpp>

int main() {
    boost::uuids::uuid uuid = boost::uuids::random_generator()();
    auto uuidString = boost::lexical_cast<std::string>(uuid);
}

答案 1 :(得分:2)

你可以尝试:

std::stringstream ss;
std::string       uuidStr;

boost::uuids::uuid uuid = boost::uuids::random_generator()();

ss << uuid;
ss >> uuidStr;

Documentation州:

  

流操作员

     

标准输入和输出流运算符&lt;&lt;和&gt;&gt;由boost / uuid / uuid_io.hpp提供。 uuid的字符串表示形式为hhhhhhhh -hhhh-hhhh-hhhh-hhhhhhhhhhhhh,其中h是十六进制数字。

boost::uuids::uuid u1; // initialize uuid

std::stringstream ss;
ss << u1;

boost::uuids::uuid u2;
ss >> u2;

assert(u1, u2);

然而lexical_cast也应该有用。

也许您应该检查uuid实际包含的内容,以确定生成的uuid是否有问题。

此外:

boost::uuids::uuid u; // initialize uuid

std::string s1 = to_string(u);
根据文档,

应该稍快一些。