【问题标题】:Boost compile error on converting UUID to string using boost::lexical_cast使用 boost::lexical_cast 将 UUID 转换为字符串时 Boost 编译错误
【发布时间】:2015-06-20 06:45:07
【问题描述】:

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

我该如何解决这个错误?

【问题讨论】:

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


    【解决方案1】:

    我猜你错过了包含:

    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);
    }
    

    【讨论】:

    • 不错的收获没想到-.-*
    • 为了清楚起见,uuid_io.hpp 似乎对于 uuid/string 的词法转换操作是必需的。在我的情况下,CLion 警告它未使用,但如果你删除它,你会遇到类似于 OP 的问题。
    【解决方案2】:

    你可以试试:

    std::stringstream ss;
    std::string       uuidStr;
    
    boost::uuids::uuid uuid = boost::uuids::random_generator()();
    
    ss << uuid;
    ss >> uuidStr;
    

    Documentation 声明:

    流操作符

    标准输入和输出流操作符> 通过包含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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多