的basic_iostream
类模板包括两个重载rdbuf()
- 一个是const
成员函数返回一个指针,指向内部流缓冲在使用中,其它采用单个streambuf*
说法,和设置的内部指针。在std :: stringstream的类和rdbuf()成员函数
然而,std::stringstream
过载rdbuf()
功能如下:
stringbuf_type* rdbuf() const;
由于只有“吸气剂”的版本过载,则“设置器”版本,它需要一个streambuf*
参数是隐藏的(由于member function hiding),和因此无法通过stringstream
实例访问。
这是否有一些原因?是否有可能更改stringstream使用的内部对象streambuf
?看起来在某些情况下这可能是可取的,例如,您想要使用将所有输入转换为小写字符串的stringstream对象。在这种情况下,从std::stringbuf
派生的自定义stringbuf类将是理想的。但是,如果没有rdbuf(streambuf*)
函数,则无法更改stringstream
使用的内部streambuf对象。
那么,为什么不提供std::stringstream
提供的方法设置内部使用的stringbuf对象?
注:为了避免混淆,我不谈论设置字符串流的内部存储器缓冲器,而我说的是具体地约设置使用的内部std::basic_stringbuf
对象。
你说“因为访问'streambuf'比改变它更常见,所以这种情况变得更加方便了。”但...为什么'std :: stringstream'只有第二个覆盖:'stringbuf * stringstream :: rdbuf(stringbuf * sb);'? – Siler 2015-04-04 23:47:26
@Siler'filebuf'具有等价的重载,所以我猜他们并不真的希望你通过拥有缓冲区的接口交换缓冲区。说实话有点难以理解。通常适合创建一个新的基类对象。 – Potatoswatter 2015-04-04 23:50:31