Запись std :: ostringstream в файл без копирования? - PullRequest
3 голосов
/ 14 июня 2011

Учитывая функцию, которая принимает выходной поток строк в качестве аргумента:

void Foo(const std::ostringstream& _oss);

Есть ли способ записи буфера потока в файл БЕЗ необходимости вызова str ()?

Я хочу избежать копирования буфера (что делает str ()).

void Foo(const std::ostringstream& _oss);
{
  std::ofstream f("foo.bin");

  //WANT: write _oss to f without copying the buffer?
}

Ответы [ 2 ]

12 голосов
/ 14 июня 2011

Есть operator<<(), принимающий буфер потока:

f << _oss.rdbuf();
* 1004.Обычно запись на диск в любом случае будет доминировать над временем, необходимым для этого.

Обратите внимание, что я бы не стал создавать идентификаторы с начальными подчеркиваниями.

0 голосов
/ 14 июня 2011

Вы не можете записать его в файл без копирования - потому что это то, что делает запись в файл, он копирует его из памяти и на диск.

Конечно, если вы хотите получить техническую информацию об этом, вы можете использовать файл с отображенной памятью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...