1

ostringstreamクラスを拡張するクラスがあります。

Class A: public ostringstream
{

}

そのオブジェクトから指定されたサイズと特定のオフセットのデータを読み取りたい。だからやってみる:

A a_;
a_ << data1 << data2;
string datax(a_[offset], size);

しかし、stringdataxステートメントでコンパイルエラーが発生します。

error: no match for operator[] in ... 

指定したオフセットとサイズのデータ​​をオブジェクトa_からコピーするにはどうすればよいですか?オブジェクトa_からデータを削除したくありません。

:クラスは他の誰かによって設計されたものであり、変更することはできません。

4

3 に答える 3

1

私はあなたができるコードで信じています:

a_ << data1 << data2;
string datax(&a_.str()[offset], size);

私には少し醜く見えます。std::stringstream代わりにプレーンを使用しないのはなぜですか?(から継承する強い理由がある場合を除きますstd::ostringstream

于 2012-05-22T18:27:52.100 に答える
1

まず第一に、標準には、派生元が機能することを保証するものは何もありませんstd::ostringstream。絶対にやらないほうがいいです。

第二に、operator []forがないのにstd::ostringstream、なぜ for が必要なのAでしょうか?

最後に、str()onを呼び出して、バッファの内容をa_取得できます。std::stringそれがあなたに役立つかどうかはわかりません。あなたがしたいことは完全には明らかではありません。

于 2012-05-22T18:26:58.837 に答える
0

str() メソッドを呼び出す必要があります。

ostringstream oss (ostringstream::out);
oss << "abcdef";
string s = oss.str();
cout << s.substr(1, 3) << endl;

この例では、「bcd」が出力されます。

于 2012-05-22T18:31:25.163 に答える