2015-04-17 25 views
3

我刚刚注意到,我用我的C++应用程序11下面的代码(其中工程安静精):标准库函数的对象为操作者提供<<转换为std :: string

template <typename T> 
std::string output_streamable_to_string(T const& kObject) { 
    std::ostringstream os; 
    os << kObject; 

    return os.str(); 
} 

所以我的问题是:在提供这种功能的标准库(std)中是否存在函数?

我知道std::to_string存在,但只适用于标准库数据类型。我想将boost::asio::ip::udp::endpoint转换为std::string。由于boost::asio::ip::udp::endpoint只提供了operator<<函数,所以我确实需要将std::ostream转换为std::string

+2

恐怕它已经是标准库的方式来做到这一点:-) –

+0

你想要的是称为序列化。看看[protobuf](https://developers.google.com/protocol-buffers/docs/overview),[msgpack](https://github.com/msgpack/msgpack-c)或类似[picojson serializer] (https://github.com/d-led/picojson_serializer) –

+0

@Dmitry Ledentsov:使用序列化库/框架完全是**过度杀毒。我只想将一个简单的数据类型或对象转换为一个'std :: string'。 @ForEveR回答了这个问题。我知道你提到的前两个库。 –

回答

5

不,标准C++没有这样的功能。但是,既然你使用提升 - 你可以使用boost::lexical_cast,或者只是使用你自己的。

+1

真的很伤心。 :D但是因为我已经在当前项目中使用了Boost.Asio,所以我将使用'boost :: lexical_cast'(已经忘记了)。我将在不需要Boost的项目中保留原始文章的功能。 –

+1

boost的lexical_cast无论如何都只是一个头文件的库,所以如果你只是将它包含到一个不使用boost的项目中就没有关系,因为不会有任何外部依赖。并且由于它是模板化的,所以尺寸增加应该很小 – CommanderBubble

相关问题