<streambuf> <iostream>

std::streambuf

typedef basic_streambuf<char> streambuf;
流的基缓冲区类

此模板被设计为所有处理窄字符(char 类型)的流缓冲区类的基虚类。

它是 basic_streambuf 的一个实例化,使用了以下模板参数:
模板参数定义注释
charTchar别名为成员 char_type
特性 (traits)char_traits<char>别名为成员 traits_type

流缓冲区是一个对象,负责执行与其关联的对象的读写操作:流将其所有此类操作委托给其关联的流缓冲区对象,该对象是与其受控输入输出序列之间的中介。

所有对象,无论是否带缓冲,都有一个关联的流缓冲区:某些流缓冲区类型可以设置为使用或不使用中间缓冲区

流缓冲区对象内部至少保存:
  • 一个 locale 对象,用于依赖于区域设置的操作。
  • 一组用于维护输入缓冲区的内部指针:ebackgptregptr
  • 一组用于维护输出缓冲区的内部指针:pbasepptrepptr

在内部,streambuf 类是一个精心设计的基类,旨在为所有派生类提供统一的公共接口:这些公共函数调用虚保护成员,派生类可以重写这些成员以实现特定行为。这些被重写的虚函数可以通过一组保护函数(见下文)访问 streambuf 类的内部成员。

成员类型

成员类型定义
char_typechar
traits_typechar_traits<char>
int_typeint
pos_typestreampos
off_typestreamoff

公开成员函数

所有流缓冲区的通用功能通过以下公共成员函数提供:

区域设置:
缓冲区管理和定位:
输入函数 (get):
输出函数 (put):

受保护成员函数

公共函数并不直接对受控输入输出序列执行操作,而是主要依赖于两个可通过一组内部指针访问的数组:

起始
起始指针
当前位置
获取/放置指针
结尾
结尾指针
输入序列ebackgptregptr
输出序列pbasepptrepptr

以下保护成员函数提供对这些指针的访问:

输入序列 (get):
输出序列 (put):
复制:

虚保护成员函数

每个streambuf派生类都应定义成员来维护上述指针相对于其自身类型的受控序列的有效性;修改指针的值,重新分配序列本身,并与关联字符序列执行所有必要的同步。

通过这种设计,涉及直接读写特定关联字符序列以及管理受控序列的核心功能,是通过虚函数提供的,派生类根据需要重写这些函数:

区域设置:

缓冲区管理和定位:

输入函数 (get):

输出函数 (put):