streampos
とpos_type
、、streamoff
との違いは何ですかoff_type
。ただし、定義が異なります。basic_stream<>::seek
の関数で何を使用する必要がありますか?
1 に答える
std::basic_istream
両方ともstd::basic_ostream
2つのテンプレートタイプを取りCharT
ますTraits
。基本ストリームの1つから派生したクラス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
との意図された意味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<>
typedefを含め、それらが§27.2.2および§27.3に準拠していることを確認する必要があります。標準。pos_type
off_type