Основные потоковые классы и объекты. Подробные определения классов

   
На этом шаге мы приведем более подробные определения классов.

   
Как и все шаблонные классы библиотеки IOStream, шаблон basic_ios<> параметризуется по двум аргументам, а его определение
выглядит так:

  namespace std {
    template <class charT,
                    class traits = char_traits<charT> >
    class basic_ios; 
  }

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

   
В частности, трактовки класса определяют признак конца файла и способы копирования/перемещения ряда символов.

   Замечание.
Термин конец файла в данном контексте означает конец входных данных, что соответствует интерпретации константы
EOF в языке С.

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

   
Соответственно по умолчанию используется класс трактовок char_traits<charT>, где charT - тип символов. Стандартная библиотека
C++ содержит специализации шаблона char_traits для типов символов char и wchar_t.

   
Существуют две специализации класса basic_ios<> для двух самых распространенных типов символов:

  namespace std {
    typedef basic_ios<char> ios; 
    typedef basic_ios<wchar_t> wios;
  }

   
Тип ios соответствует базовому классу "старой" библиотеки IOStream, разработанной AT&T, и может использоваться для
обеспечения совместимости со старыми программами C++.

   
Класс потокового буфера, используемый basic_ios, определяется аналогично:

  namespace std {
    template <class charT,
        class traits = char_traits<charT> >
    class basic_streambuf;
    typedef basic streambuf<char> streambuf;
    typedef basic_streambuf<wchar_t> wstreambuf; 
  }

   
Конечно, шаблоны basic_istream<>, basic_ostream<> и basic_iostream<> тоже параметризуются по типу символов и классу трактовок:

  namespace std {
    template <class charT,
        class traits = char_traits<charT> > 
    class basic_istream;

  template <class charT,
        class traits = char_traits<charT> > 
  class basic_ostream;

  template <class charT,
        class traits = char_traits<charT> > 
  class basic_iostream; 
  }

   
По аналогии с другими классами также существуют специализации для двух важнейший типов символов:

  namespace std {
    typedef basic_istream<char>   istream; 
    typedef basic_istream<wchar_t> wistream;

    typedef basic_istream<char>  ostream; 
    typedef basic_istream<wchar_t> wostream;
 
    typedef basic_istream<char>  iostream; 
    typedef basic_istream<wchar_t> wiostream; 
  }

   
В западном полушарии обычно используются типы istream и ostream, в целом совместимые со "старыми" потоковыми классами AT&T.

   
Классы istream_withassign, ostream_withassign и iostream_withassign, включенные в некоторые старые потоковые библиотеки (и производные от
istream, ostream и iostream соответственно), не поддерживаются стандартом. Их функциональность реализуется другими средствами.

   
Также в библиотеку IOStream входят дополнительные классы для выполнения форматированного ввода-вывода при работе с файлами и строками.

   
На следующем шаге мы рассмотрим глобальные потоковые объекты.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий