从std :: ostringstream重定向到另一个std :: ostringstream

时间:2014-11-27 15:36:29

标签: c++ std c++03 ostringstream

我需要将一些std::ostringstream的数据写入另一个std::ostringstream。当然,我可以使用str()函数

std::ostringstream in;
std::ostringstream out;

in << "just a test"; // it's just an example. I mean that stream in is filled somewhere
...
out << in.str();

我想知道是否有更多直接方式来做同样的事情。

2 个答案:

答案 0 :(得分:2)

您可以重新分配关联的缓冲区:

os2.rdbuf(os1.rdbuf());

这有效地使ostream混淆。

实际上,您甚至可以直接从streambuffer指针IIRC构建ostream


同样,您可以将整个缓冲区附加到另一个流而无需重新分配:

std::cout << mystringstream.rdbuf(); // prints the stringstream to console

答案 1 :(得分:1)

删除复制赋值运算符/复制构造函数。但是,您可以使用成员函数swap(C ++ 11)或std::swap来交换内容。或者,您可以使用移动赋值运算符(C ++ 11)将一个移动到另一个。此解决方案仅适用于您不关心源字符串流内容的情况。

示例:

out = std::move(in); // C++11
out.swap(in); // C++11
std::swap(out, in); 
PS:我刚刚意识到g ++没有编译上面的任何一行(似乎它不支持ostringstream的移动/交换),但是,clang ++编译它。根据标准(27.8.4),交换/移动应该有效。 见C++ compiler does not recognize std::stringstream::swap