9

streampospos_type、、streamoffとの違いは何ですかoff_type。ただし、定義が異なります。basic_stream<>::seekの関数で何を使用する必要がありますか?

4

1 に答える 1

13

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_typeTraitsつまり、テンプレートパラメータを明示的に指定しない場合、は実際にはにA::pos_typeなり、実際にはになります。std::streamposA::off_typestd::streamoff

の独自のバージョンを作成し、Traitsなどの標準ライブラリテンプレートで使用する場合は、および(および他の多くのデータ型)のstd::basic_istream<>typedefを含め、それらが§27.2.2および§27.3に準拠していることを確認する必要があります。標準。pos_typeoff_type

于 2012-04-13T04:44:32.703 に答える