std::fpos
| ヘッダ <ios>で定義 |
||
| template< class State > class fpos; |
||
クラステンプレートstd::fposの特殊化は、ストリームまたはファイル内の絶対位置を識別します。fpos型の各オブジェクトは、ストリーム内のバイト位置(通常はstd::streamoff型のプライベートメンバとして)と、現在のシフト状態(State型の値、通常はstd::mbstate_t)を保持します。
std::fpos<std::mbstate_t>の以下のtypedef名は提供されています(標準ではスペルが異なりますが、同じ型を指します)。
| ヘッダー
<iosfwd>で定義されています。 | |
| 型 | 定義 |
std::streampos
|
std::fpos<std::char_traits<char>::state_type> |
std::wstreampos
|
std::fpos<std::char_traits<wchar_t>::state_type> |
std::u8streampos(C++20) |
std::fpos<std::char_traits<char8_t>::state_type> |
std::u16streampos (C++11) |
std::fpos<std::char_traits<char16_t>::state_type> |
std::u32streampos (C++11) |
std::fpos<std::char_traits<char32_t>::state_type> |
fposのすべての特殊化は、DefaultConstructible、CopyConstructible、CopyAssignable、Destructible、およびEqualityComparableの要件を満たします。
Stateがトリビアルにコピー構築可能である場合、fposはトリビアルなコピーコンストラクタを持ちます。Stateがトリビアルにコピー代入可能である場合、fposはトリビアルなコピー代入演算子を持ちます。Stateがトリビアルにデストラクタブルである場合、fposはトリビアルなデストラクタを持ちます。
目次 |
[編集] テンプレートパラメータ
| 状態 (State) | - | シフト状態を表す型 |
| 型要件 | ||
-Stateは、Destructible、CopyAssignable、CopyConstructible、およびDefaultConstructibleの要件を満たす必要があります。 | ||
[編集] メンバ関数
| シフト状態の値を取得/設定します。 (public member function) |
さらに、以下の操作をサポートするためのメンバ関数および非メンバ関数が提供されています。
- オフセットゼロを格納し、状態オブジェクトを値初期化するデフォルトコンストラクタ。
- 型((possibly const))
std::streamoffの引数を受け入れる非明示的コンストラクタ。これはそのオフセットを格納し、状態オブジェクトを値初期化します。このコンストラクタは、特殊値std::streamoff(-1)も受け入れる必要があります。この方法で構築されたstd::fposは、エラーを示すために一部のストリーム操作によって返されます。
- (possibly const)
fposからstd::streamoffへの明示的な変換。結果は格納されているオフセットです。
- (possibly const)
std::fpos型の2つのオブジェクトを比較し、bool型のprvalueを返すoperator==およびoperator!=。p != qは!(p == q)と同等です。
- (possibly const)
fpos<State>型のオブジェクトpと、(possibly const)std::streamoff型のオブジェクトoに対するoperator+およびoperator-。
-
p + oはfpos<State>型を持ち、pのオフセットにoを加算した結果のオフセットを格納します。 -
o + pはfpos<State>に変換可能な型を持ち、変換結果はp + oと等しくなります。 -
p - oはfpos<State>型を持ち、pのオフセットからoを減算した結果のオフセットを格納します。
-
-
std::streamoffを受け入れ、それぞれ格納されているオフセットに加算/減算できるoperator+=およびoperator-=。
- (possibly const)
std::fpos型の2つのオブジェクトを減算してstd::streamoffを生成するoperator-。2つのオブジェクトpおよびqに対して、p == q + (p - q)となります。
[編集] 注記
一部のI/Oストリームのメンバ関数は、メンバtypedefpos_typeのオブジェクトを返したり操作したりします。ストリームの場合、これらのメンバtypedefはテンプレートパラメータTraitsによって提供されます。Traitsはデフォルトでstd::char_traitsであり、そのpos_typeはstd::fposの特殊化として定義されます。Traits::pos_typeがstd::fpos<std::mbstate_t>(別名std::streampos、std::wstreamposなど)でない場合、I/Oストリームライブラリの動作は実装定義となります。
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 57 | C++98 | streamposとwstreamposは矛盾して異なっていてもよいが、同じである必要があった |
明確化されて 同じになった |
| P0759R1 | C++98 | 仕様が不明確で不完全だった | 整理された |
| P1148R0 | C++11 | u16streamposおよびu32streamposの定義がどのヘッダーにあるのか不明 |
明確化された |
| LWG 2114 (P2167R3) |
C++98 | 等価性比較の非bool戻り値が許可されていた |
不許可になった |
[編集] 関連項目
| ファイル/ストリームの相対的な位置(fposからのオフセット)を表し、任意のファイルサイズを表現するのに十分 (typedef) | |
| 出力位置インジケータを返す ( std::basic_ostream<CharT,Traits> の public メンバ関数) | |
| 出力位置インジケータを設定する ( std::basic_ostream<CharT,Traits> の public メンバ関数) | |
| ファイル位置指示子を取得する (関数) |