5

我有这个代码,它基于 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  

我该如何解决这个错误?

4

2 回答 2

11

你错过了包括,我猜:

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);
}
于 2015-04-14T15:26:08.240 回答
2

你可以试试:

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

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

ss << uuid;
ss >> uuidStr;

文档指出:

流运算符

标准输入和输出流运算符 << 和 >> 通过包含 boost/uuid/uuid_io.hpp 提供。uuid 的字符串表示形式是 hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh,其中 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);

根据文档应该稍微快一点。

于 2015-04-14T15:17:39.653 回答