filebuf в ifstream и ofstream - PullRequest
       19

filebuf в ifstream и ofstream

0 голосов
/ 03 мая 2010

Как я могу установить новый массив символов в качестве буфера filebuf fstream, в filebuf есть функция (setbuf), но она защищена. при поиске в Интернете некоторые сайты упоминают fstream :: setbuf, но, похоже, он больше не существует.

Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2010

streambuf предназначен для настройки с использованием шаблона метода шаблона, где публичные методы не являются виртуальными, а подклассы настраивают поведение путем реализации закрытых виртуальных методов.

В данном случае открытый метод, который вызывает setbuf, называется pubsetbuf. * ​​1003 *

Обратите внимание, что реализация setbuf в basic_filebuf довольно слабо определена: единственная гарантия - setbuf (0, 0) делает поток небуферизованным. В других случаях эффект определяется реализацией.

0 голосов
/ 03 мая 2010

Смысл защищенной функции-члена в том, что она должна быть переопределена вашим производным подклассом. Вот краткий раздел руководства по libstdc ++, в котором обсуждается именно то, что .

Вот выдержка из <streambuf>, в которой говорится то же самое в коде:

  // [27.5.2.4.2] buffer management and positioning
  /**
   *  @brief  Manipulates the buffer.
   *
   *  Each derived class provides its own appropriate behavior.  See
   *  the next-to-last paragraph of 
   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html
   *  for more on this function.
   *
   *  @note  Base class version does nothing, returns @c this.
  */
  virtual basic_streambuf<char_type,_Traits>* 
  setbuf(char_type*, streamsize)
  { return this; }
...