15

以下のスニペットを試してみましたが、目的の出力が得られません。

#include<iostream>
#include<sstream>
using namespace std;
void MyPrint(ostream& stream)
{
    cout<<stream.rdbuf()<< endl;
}
int main()
{
    stringstream ss;
    ss<<"hello there";
    MyPrint(ss);                //Prints fine

    ostringstream oss;
    oss<<"hello there";
    MyPrint(oss);               //Does not print anything
    getchar();
}

と の唯一の違いはstringstreamostringstreamが方向を強制し、 よりも少し速いことですstringstream

私は何かを見逃していますか?

PS: 同様の質問が以前に投稿されましたが、回答が得られませんでした。

4

2 に答える 2

24

std::stringstreamstd::ostringstreamさまざまなフラグを渡しstd::stringbufます。特に、 の std::stringbufstd::ostringstream読み取りをサポートしていません。そしてstd::cout << stream.rdbuf()、ストリームバッファに対する読み取り操作です。

から文字を抽出する方法std::ostringstreamは、関数を使用するstd::ostringstream::str()ことです。

于 2013-08-15T11:06:04.293 に答える
0

stringstream は、ostringstream と istringstream の双方向の実装と考えるべきではありません。これは、ostringstream と istringstream の両方の派生クラスとして実装されているため、入力機能と出力機能の両方を実装しています。

どちらを使用するかは、使用目的によって異なります。ストリーム経由でデータにアクセスできず、ストリームにデータを書き込むだけでよい場合は、ostringstream だけで十分です。ただし、API に提供するものに双方向を実装したいがそれを制限したい場合は、それをキャストできます。

stringstream ss;  // My bidirectional stream

ostringstream *p_os = &ss;  // Now an output stream to be passed to something only allowed to write to it.

int bytes = collectSomeData(p_oss);
于 2013-08-15T11:10:38.423 に答える