我在编译器项目中使用c++ streambuf
类,需要一种方便的方法来获取流中的当前位置。
有两个成员函数,streambuf::pubseekpos
和streambuf::pubseekoff
,来修改位置,我对没有streambuf::pubgetpos
成员函数(或类似的东西)来读取它感到非常困惑。
似乎有两种可能的解决方法:
-
我可以保存当前位置在一个单独的变量和修改每当我从流中读取字符时,它都会手动执行。
-
我可以调用
streambuf::pubseekoff(0, ios_base::cur)
,它返回
对于这样一个琐碎的任务,第二个选项似乎是可用的,但效率低下且不美观。有更好的方法吗?
streambuf
没有单独的读取位置的接口。然而,istream
和ostream
(分别为tellg
和tellp
)可以。
有趣的是,流使用选项2来获取它们的位置,所以这很好。