是否可以有一个流streambuf
在其原始流被破坏后仍然存在吗?
streambuf* f() {
ifstream my_stream;
// ...
return my_stream.rdbuf();
}
void g() {
streambuf *s = f();
// ...
ifstream my_new_stream;
my_new_stream.rdbuf( s );
}
即,我想要指向streambuf
返回的对象f()
即使在之后仍然有效my_stream
超出范围。稍后,我想设置其他一些流streambuf
给被拯救的人streambuf
.
这可能吗?如果是这样,怎么办?
这是不可能的。std::ifstream
构造、拥有和销毁其缓冲区。它“出口”的唯一原因是rdbuf
是允许重定向std::cin
等等。在GNU实现中,缓冲区是一个简单的成员(不是指针)。
std::ifstream
不导出rdbuf()
有争论的成员。它的父类之一确实如此,但这应该被重新定义所掩盖rdbuf
in std::basic_ifstream
有签名
std::filebuf *rdbuf() const;
std::filebuf
也是不可复制的。
(The rdbuf(std::streambuf *)
可以通过强制转换来检索成员std::ios
。使用它会引起熟悉的鼻恶魔。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)