类模板
<streambuf> <iostream>

std::basic_streambuf

template <class charT, class traits = char_traits<charT> >  class basic_streambuf;
面向流的基缓冲类

此模板被设计为所有流缓冲类的基虚拟类。

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

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

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

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

模板参数

charT
字符类型。
这应是一个非数组的 POD 类型
别名为成员类型basic_streambuf::char_type
特性 (traits)
字符特性类,它定义了流对象使用的字符的基本属性(参见char_traits)。
traits::char_type 应当与 charT 相同。
别名为成员类型basic_streambuf::traits_type

sub_match for string literals (class)

这些实例化在<streambuf>中声明,而<iostream>通过引用包含了它。

成员类型

成员类型定义说明
char_type第一个模板参数(charT
traits_type第二个模板参数(traits默认为:char_traits<charT>
int_typetraits_type::int_type
pos_typetraits_type::pos_type通常与 streampos 相同
off_typetraits_type::off_type通常与 streamoff 相同

公开成员函数

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

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

受保护成员函数

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

beginning
(起始指针)
current position
(get/put指针)
end
(结束指针)
Input sequenceebackgptregptr
Output sequencepbasepptrepptr

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

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

虚保护成员函数

每个streambuf-派生类应定义成员,以使其指针对于其自身的受控序列类型保持有效;修改指针值、重新分配序列本身,并执行所有必要的与关联字符序列的同步。

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

区域设置:

缓冲区管理和定位:

输入函数 (get):

输出函数 (put):