// <streambuf>
template <class charT, class traits = char_traits<charT> > class basic_streambuf;

basic_streambuf 类是所有处理窄字符(char)的流缓存(Stream buffer)类的底层虚类(Base virtual class)。

  • charT

    字符类型。

    必须是一个非数组的(Non-array) C 型类型(POP type)。

    在类模板内部,使用其别名为 char_type 的成员类型。

    traits

    字符属性类,定义了被流对象所使用的字符的本质特征。

    traits::char_type 必须跟 charT 一致。

    在类模板内部,使用其别名为 traits_type 的成员类型。

  • 流缓存(Stream buffer)负责与其关联的流对象的读写操作:流对象会将它的所有此类操作委派(Delegate)到它所关联的流缓存对象中去。所以 basic_streambuf 对象就像是流与对应的被控制的输入及输出序列(Sequence)之间的媒介。

    所有的流对象,不管它是否需要缓存,都有一个关联的流缓存对象。流缓存类型的对象在定义之后,在之后的使用过程中可以被设置以选择是否使用中间缓存(Intermediate buffer)。

    流缓存对象内部保存的信息,至少有:

    • 一个 std::locale 对象,用来进行本地化依赖(Locale-dependent)的操作。
    • 一系列用来维护输入缓存的内部指针:ebackgptregptr
    • 一系列用来维护输出缓存的内部指针:pbasepptrepptr

    在内部,std::basic_streambuf 类模板是一个精心设计的基类模板,用以为所有继承类(Derived classe)提供统一的公共接口(Public interface)。这些公共函数调用受保护的(Protected)虚成员函数,而继承类可以重载这些虚函数以实现特定的行为。

  • char_type 第一个模板参数(charT
    traits_type 第二个模板参数(traits
    int_type traits_type::int_type
    pos_type traits_type::pos_type
    off_type traits_type::off_type
  • (constructor) 构造对象
    (destructor) 析构对象

    本地化(Locale): 

    pubimbue 激活本地化
    getloc 获取当前本地化

    缓存管理(Buffer management)及定位(Position)

    pubsetbuf 设置缓存数组
    pubseekoff 设置指向相对位置的内部位置指针(Internal position)
    pubseekpos 设置指向绝对位置的内部位置指针
    pubsync 同步(Synchronize)流缓存

    输入函数

    in_avail 获取可读的字符数
    snextc 前进到下一位置且获取字符
    sbumpc 获取当前字符且前进到下一位置
    sgetc 获取当前字符
    sgetn 获取字符序列
    sputbackc 放回一个字符
    sungetc 减小当前位置

    输出函数

    sputc 存储字符到当前位置且增加输出指针
    sputn 输出字符序列
  • 输入序列(Input sequence)

    eback 指向输入序列起始的指针
    gptr 指向输入序列当前位置的指针
    egptr 指向输入序列末尾的指针
    gbump 增加获取指针(Get pointer)的值
    setg 设置输入序列指针

    输出序列(Output sequence)

    pbase 指向输出序列起始的指针
    pptr 指向输出序列当前位置的指针
    epptr 指向输出序列末尾的指针
    pbump 增加放入指针(Put pointer)的值
    setp 设置输出序列指针

    拷贝

    operator= C++11 赋值
    swap C++11 交换
  • 本地化(Locale)

    imbue 激活本地化

    缓存管理(Buffer management)及定位(Positioning)

    setbuf 设置缓存内容
    seekoff 设置指向相对位置内部位置指针
    seekpos 设置指向绝对位置内部位置指针
    sync 同步流缓存

    输入函数

    showmanyc 获取可用字符的个数
    xsgetn 获取字符序列
    underflow 直接获取字符而不影响当前位置
    uflow 获取字符且增加当前位置
    pbackfail 放回字符且减小当前位置

    输出函数

    xsputn 放置字符序列
    overflow 直接放置字符而不影响当前位置