streampos
和pos_type
、streamoff
和之间有什么区别off_type
,除了它们的定义不同。我应该使用basic_stream<>::seek
's 函数做什么?
1 回答
std::basic_istream
并且std::basic_ostream
都采用两种模板类型,CharT
并且Traits
. 给定一个派生自基本流之一的类 A,Traits
可以将数据类型检索为
A::traits_type
根据 C++ 标准的 §21.2,此数据类型必须提供以下成员类型:
char_type // must be identical to CharT of the basic-stream
off_type
pos_type
(以及与当前问题无关的一些其他数据类型)。给定方法std::basic_istream<>::seekg()
的定义off_type
方式, and的预期含义pos_type
是:
pos_type
用于流中的绝对位置off_type
用于相对位置
所以如果你想使用绝对版本seekg()
,你应该声明的数据类型是A::pos_type
(与 相同A::traits_type::pos_type
)。对于相对版本,它是A::off_type
.
关于std::streampos
和std::streamoff
:这些也被标准定义为用于默认版本的数据类型traits_type
。换句话说,如果您没有明确指定Traits
模板参数,则A::pos_type
实际上将是std::streampos
,A::off_type
并且实际上是std::streamoff
。
如果您创建自己的版本Traits
并希望将其与std::basic_istream<>
等标准库模板一起使用,则必须包含pos_type
和off_type
(以及许多其他数据类型)的 typedef,并确保它们符合 §27.2.2 和 §27.3标准。