我将C++streambuf类用于编译器项目,需要一种方便的方法来获取流中的当前位置。有两个成员函数,streambuf::pubseekpos和一个streambuf::pubseekoff,用来修改位置,我很困惑没有streambuf::pubgetpos成员函数(或类似的东西)来读取它。似乎有两种可能的解决方法:我可以将当前位置保存在一个单独的变量中并修改每当我从流中读取字符时手动执行它。我可以调用streambuf::pubseekoff(0,ios_base::cur),它会返回新的流位置。第二个选项似乎可用,但对于这样一个微不足道的任务来说效率低下且不美观。有更好的方法
假设我有一个ifstream,它表示一个包含许多聚合在一起的子文件的大文件。我希望能够从代表文件一部分的较大ifstream(给定大小和偏移量)创建一个“子”istream,以便其他代码可以从中读取子流就好像它是一个独立的istream。关于如何实现这一点有什么想法吗?编辑-我宁愿避免提升。 最佳答案 这是一个streambuf“过滤器”的示例,它从指定位置开始读取包含的streambuf并读取到指定大小。您创建substreambuf,将原始streambuf传入,然后substreambuf转换访问,以便从底层中的所需位置读取所
我正在尝试做这样的事情:for(std::streamposPosition=0;Position但是,std::streampos似乎没有重载operator++。尝试使用Position=(Position+1)会导致以下错误:ISOC++saysthattheseareambiguous,eventhoughtheworstconversionforthefirstisbetterthantheworstconversionforthesecond:是否有任何解决方法,或者我是否必须依赖longunsignedint足够大以容纳文件? 最佳答案
std::streampos是否保证为unsignedlonglong?如果不是这样,std::istream::seekg如何在大于4G的文件上正常工作? 最佳答案 来自http://en.cppreference.com/w/cpp/io/fpos:std::streampos是类模板的特化templateclassfpos;std::streampos类型定义为std::fpos::state_type>类型为fpos的每个对象保存流中的字节位置(通常作为std::streamoff类型的私有(private)成员)。来自ht
标题几乎说明了一切。我正在实现自己的streambuf类,我想知道委员会在决定同时包含std::streambuf::seekpos()和std::streambuf时的想法::seekoff()(对于相关的pubseekpos()和pubseekoff()也是如此)。在我看来seekpos(x)在我能想象的每一种情况下都应该与seekoff(x,std::ios::beg)具有相同的效果.但也许我的想象力还不够好。那么,当seekpos完全被seekoff包含时,为什么要同时拥有这两者呢?或者至少,你为什么不让前者的默认实现简单地调用后者?如果答案是“因为那是STL所做的”或类似的,
标题几乎说明了一切。我正在实现自己的streambuf类,我想知道委员会在决定同时包含std::streambuf::seekpos()和std::streambuf时的想法::seekoff()(对于相关的pubseekpos()和pubseekoff()也是如此)。在我看来seekpos(x)在我能想象的每一种情况下都应该与seekoff(x,std::ios::beg)具有相同的效果.但也许我的想象力还不够好。那么,当seekpos完全被seekoff包含时,为什么要同时拥有这两者呢?或者至少,你为什么不让前者的默认实现简单地调用后者?如果答案是“因为那是STL所做的”或类似的,
streampos之间有什么区别?和pos_type,streamoff和off_type,除了它们的定义不同。我应该将basic_stream::seek与什么一起使用?的功能? 最佳答案 std::basic_istream和std::basic_ostream两者都采用两种模板类型,CharT和Traits.给定一个派生自基本流之一的A类,Traits数据类型可以检索为A::traits_type根据C++标准的§21.2,该数据类型必须提供以下成员类型:char_type//mustbeidenticaltoCharToft