1. ホーム
  2. c++

[解決済み] ストリーム全体をstd::stringに読み込むには?

2023-04-08 17:46:12

質問

ストリーム全体(複数行)を文字列に読み込もうとしています。

私はこのコードを使っていて、それは動作しますが、それは私のセンスに不快感を与えています...。もっと簡単な方法があるのではないでしょうか?もしかしたら、stringstreamsを使うとか?

void Obj::loadFromStream(std::istream & stream)
{ 
  std::string s;

  std::streampos p = stream.tellg();  // remember where we are

  stream.seekg(0, std::ios_base::end); // go to the end
  std::streamoff sz = stream.tellg() - p;  // work out the size
  stream.seekg(p);        // restore the position

  s.resize(sz);          // resize the string
  stream.read(&s[0], sz);  // and finally, read in the data.


実は const への参照も同様で、その方が簡単かもしれません...。

const std::string &s(... a miracle occurs here...)

どのように解決するのですか?

どのように

std::istreambuf_iterator<char> eos;
std::string s(std::istreambuf_iterator<char>(stream), eos);

(MVPでなければワンライナーでも可)

2011年以降の編集で、このアプローチのスペルは

std::string s(std::istreambuf_iterator<char>(stream), {});