7.5.1  streambuf类

7.5.1 streambuf

类模板basic_stringbuf的定义形式为:

978-7-111-51399-5-Chapter07-94.jpg

其中包含5个公用类型定义、两个构造函数、一个get()函数和一个set()函数,并重载了6个虚函数。

978-7-111-51399-5-Chapter07-95.jpg

两个构造函数:

978-7-111-51399-5-Chapter07-96.jpg

get()函数和set()函数的形式为:

978-7-111-51399-5-Chapter07-97.jpg

6个虚函数的形式:

978-7-111-51399-5-Chapter07-98.jpg

978-7-111-51399-5-Chapter07-99.jpg

下面对其各成员函数和构造函数进行详细说明。

两个构造函数的主要功能是构造基类basic_streambuf的对象,并初始化基类,使用参数which初始化模式。

978-7-111-51399-5-Chapter07-100.jpg

成员函数str()的功能是获取字符串缓冲区中的内容或初始化输入输出序列。

虚underflow()函数将参数指定的字符放入输入缓冲区,如果可能,需要3种方法:

1)如果输入序列的当前位置有效,并且traits::eq_int_type(c,traits::eof())返回false、traits::eq(to_char_type(c),gptr()[-1])返回true以及assignsgptr()-1togptr(),上述条件均满足时,函数返回字符c。

2)如果traits::eq_int_type(c,traits::eof())返回false,并且假设输入序列的当前位置有效、模式为输出(ios::out)时,指定字符c给∗(--gp()),函数返回traits::not_eof(c)。

说明:traits::eof()函数表明函数调用失败。

成员函数overflow()的功能是将参数指定的字符c送入输出缓冲区,如果可能,有两种可能的办法:

1)当traits::eq_int_type(c,traits::eof())返回false,并输出缓冲区当前位置有效时,函数会调用sputc(c)函数,如果调用成功,函数返回字符c。

2)如果traits::eq_int_type(c,traits::eof())返回true,将没有字符被添加(ap-pend)。函数调用成功时,返回一个数值;调用失败时,返回traits::eof()。

成员函数seekoff()的功能是在一个可控序列中改变流的位置。seekpos()函数的功能和seekoff()函数近似。