2

1 つの stringstream オブジェクトを指定して、それを別のオブジェクトにコピーしたいと思います。によると :

C++であるstringstreamオブジェクトから別のstringstreamオブジェクトにコピーする方法は?

(とりわけ)、これを行う適切な方法は、rdbuf()メンバーを使用することです。ただし、特に文字列ストリームが const の場合、これは問題を引き起こすようです。

例えば:

void DoSomething(stringstream & ss)
{
    stringstream sstmp;

    cout << "pos 1: " << ss.tellg() << "\n";
    sstmp << ss.rdbuf();
    cout << "pos 2: " << ss.tellg() << "\n";
//        sstmp.rdbuf()->pubseekpos(0, ios_base::in | ios_base::out);

    cout << "String: " << sstmp.str() << "\n";
}

int main(void)
{
    stringstream ss;
    ss << "Hello";

    DoSomething(ss);
    DoSomething(ss);

    return 0;
}

出力は

pos 1: 0
pos 2: 5
String: Hello
pos 1: 5
pos 2: 5
String: 

への最初の呼び出しDoSomething()は内部ポインターを変更し、const であってもそうしているようですstringstream(const ではないため、ここでは除外されていますtellg())。これを修正する方法は を使用することですがseekg()、これは const ストリームでは呼び出すことができません。別の方法 (コードでコメントアウト) を試みましたが、成功しませんでした。

したがって、次のいずれかに対して何ができますか:

  1. (const)stringstreamを実際には変更せずにコピーする、または

  2. const オブジェクトの位置をリセットしますか?

注: Arch Linux で gcc 4.8.1 を使用してコンパイル

4

1 に答える 1