2012-04-13 13 views

答えて

10

std::basic_istreamおよびstd::basic_ostreamは両方とも、CharTおよびTraitsの2つのテンプレートタイプをとる。基本ストリームのうちの1つから導出されたクラスA所与、Traitsデータ型はC++標準の§21.2によれば

A::traits_type 

として取得することができ、このデータ型は、以下のメンバーの種類を提供しなければならない。

char_type // must be identical to CharT of the basic-stream 
off_type 
pos_type 

(およびこの質問に関係のないいくつかのさらなるデータタイプ)。 off_typepos_typeの意図された意味、way the std::basic_istream<>::seekg() method is defined与えられます。

  • 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::streamposなり、A::off_typeは実際std::streamoffになります。

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

+6

+1さらに、 'pos_type'はスカラー番号ではなく、ファイル内のその位置にあるテキストエンコーディングの状態に関する情報も含みます。その意図された目的は以前に遭遇した位置に*戻る*であるが、 'off_type'はどこかで事前計算できる。 – Potatoswatter

関連する問題