1

I need write data from some std::ostringstream to another std::ostringstream. Of course, I can use str() function

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

I'd like to know if there is more direct way to do the same.

4

2 回答 2

2

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

os2.rdbuf(os1.rdbuf());

这有效地为 ostream 起别名。

实际上,您甚至可以ostream直接从流缓冲区指针 IIRC构造


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

std::cout << mystringstream.rdbuf(); // prints the stringstream to console
于 2014-11-27T16:20:40.623 回答
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++ 编译器无法识别 std::stringstream::swap

于 2014-11-27T15:51:55.143 回答