C++ 将“ifstream”对象的一部分用作“istream”`
这感觉像是一个简单的问题;说到C++魔术,我是新手。< / P> 我有一个C++ 将“ifstream”对象的一部分用作“istream”`,c++,iterator,std,ifstream,C++,Iterator,Std,Ifstream,这感觉像是一个简单的问题;说到C++魔术,我是新手。< / P> 我有一个ifstream和一个接受istream作为其单个参数的函数。我想向它传递一个对象,该对象将删除最后两个字节/字符(或设置为特定长度),但在其他方面的行为与原始的ifstream对象完全相同。理想情况下,无需立即将ifstreams内容读取到内存中 更具体地说,我有一个解析函数,它应该处理大部分文件(除了最后一个块),我想创建一个删除最后一个块的同一文件流的“视图” 该文件保证不会更改,并且我提前知道要解析的块的长度 谢谢
ifstream
和一个接受istream
作为其单个参数的函数。我想向它传递一个对象,该对象将删除最后两个字节/字符(或设置为特定长度),但在其他方面的行为与原始的ifstream
对象完全相同。理想情况下,无需立即将ifstream
s内容读取到内存中
更具体地说,我有一个解析函数,它应该处理大部分文件(除了最后一个块),我想创建一个删除最后一个块的同一文件流的“视图”
该文件保证不会更改,并且我提前知道要解析的块的长度
谢谢切片在C++中有非常特殊的含义,它似乎并不是你所说的,尤其是因为流不能被复制。你可能想考虑用不同的方式来描述你的问题。现在很难理解你在说什么。一个选项是编写一个自定义的
std::streambuf
,它读取原始std::ifstream
的std::streambuf
,但忽略最后的字节(或者,至少只返回达到所需块大小的字节)。然后,您可以使用这个自定义的std::streambuf
构造一个std::istream
对象,然后将该std:::istream
传递给函数,而不是传递std::ifstream
您是否尝试过向我们展示您的意思?嗯。通常对于这样的事情,我会查看Boost的流过滤器。但在本例中,实际使用std::streambuf
内部缓冲区听起来是个好主意。