streamposとpos_type、、streamoffとの違いは何ですかoff_type。ただし、定義が異なります。basic_stream<>::seekの関数で何を使用する必要がありますか?
1 に答える
std::basic_istream両方ともstd::basic_ostream2つのテンプレートタイプを取り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::streamposstd::streamoffこれらも、のデフォルトバージョンに使用されるデータ型として標準で定義されていますtraits_type。Traitsつまり、テンプレートパラメータを明示的に指定しない場合、は実際にはにA::pos_typeなり、実際にはになります。std::streamposA::off_typestd::streamoff
の独自のバージョンを作成し、Traitsなどの標準ライブラリテンプレートで使用する場合は、および(および他の多くのデータ型)のstd::basic_istream<>typedefを含め、それらが§27.2.2および§27.3に準拠していることを確認する必要があります。標準。pos_typeoff_type