Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将“ifstream”对象的一部分用作“istream”`_C++_Iterator_Std_Ifstream - Fatal编程技术网

C++ 将“ifstream”对象的一部分用作“istream”`

C++ 将“ifstream”对象的一部分用作“istream”`,c++,iterator,std,ifstream,C++,Iterator,Std,Ifstream,这感觉像是一个简单的问题;说到C++魔术,我是新手。< / P> 我有一个ifstream和一个接受istream作为其单个参数的函数。我想向它传递一个对象,该对象将删除最后两个字节/字符(或设置为特定长度),但在其他方面的行为与原始的ifstream对象完全相同。理想情况下,无需立即将ifstreams内容读取到内存中 更具体地说,我有一个解析函数,它应该处理大部分文件(除了最后一个块),我想创建一个删除最后一个块的同一文件流的“视图” 该文件保证不会更改,并且我提前知道要解析的块的长度 谢谢

这感觉像是一个简单的问题;说到C++魔术,我是新手。< / P> 我有一个
ifstream
和一个接受
istream
作为其单个参数的函数。我想向它传递一个对象,该对象将删除最后两个字节/字符(或设置为特定长度),但在其他方面的行为与原始的
ifstream
对象完全相同。理想情况下,无需立即将
ifstream
s内容读取到内存中

更具体地说,我有一个解析函数,它应该处理大部分文件(除了最后一个块),我想创建一个删除最后一个块的同一文件流的“视图”

该文件保证不会更改,并且我提前知道要解析的块的长度


谢谢

切片在C++中有非常特殊的含义,它似乎并不是你所说的,尤其是因为流不能被复制。你可能想考虑用不同的方式来描述你的问题。现在很难理解你在说什么。一个选项是编写一个自定义的
std::streambuf
,它读取原始
std::ifstream
std::streambuf
,但忽略最后的字节(或者,至少只返回达到所需块大小的字节)。然后,您可以使用这个自定义的
std::streambuf
构造一个
std::istream
对象,然后将该
std:::istream
传递给函数,而不是传递
std::ifstream
您是否尝试过向我们展示您的意思?嗯。通常对于这样的事情,我会查看Boost的流过滤器。但在本例中,实际使用
std::streambuf
内部缓冲区听起来是个好主意。