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 ストリームでは呼び出すことができません。別の方法 (コードでコメントアウト) を試みましたが、成功しませんでした。
したがって、次のいずれかに対して何ができますか:
(const)
stringstream
を実際には変更せずにコピーする、またはconst オブジェクトの位置をリセットしますか?
注: Arch Linux で gcc 4.8.1 を使用してコンパイル