std::ios_base::iword
| long& iword( int index ); |
||
まず、index を有効なインデックスにするのに十分なプライベートストレージ(long または別のインデックス可能なデータ構造の動的配列)を割り当てるかサイズ変更し、次にプライベートストレージの index 番目の要素への参照を返します。
この参照は、この ios_base オブジェクトに対する他の操作(iword() の別の呼び出しを含む)によって無効になる可能性がありますが、格納されている値は保持されるため、後で同じインデックスで iword(index) を読み取ると、std::basic_ios::copyfmt() の次の呼び出しまで同じ値が得られます。この値は任意の目的で使用できます。要素のインデックスは、xalloc() の以前の呼び出しによって取得されている必要があります。そうでない場合、動作は未定義です。新しい要素は 0 に初期化されます。
関数が失敗した場合(割り当ての失敗が原因である可能性があります)、*this が basic_ios<> オブジェクトまたはサブオブジェクトの基底クラスサブオブジェクトである場合、std::basic_ios<>::setstate(badbit) を呼び出します。これにより、std::ios_base::failure がスローされる可能性があります。
目次 |
[編集] 注記
iword ストレージの典型的な使用法は、ユーザー定義の I/O マニピュレーターからユーザー定義の operator<< および operator>>、または標準ストリームに埋め込まれたユーザー定義のフォーマットファセットに情報を(例えばカスタムフォーマットフラグを)渡すことです。
[編集] パラメータ
| index | - | 要素のインデックス値 |
[編集] 戻り値
要素への参照。
[編集] 例外
badbit を設定する際に、std::ios_base::failure をスローする可能性があります。
[編集] 例
#include <iostream> #include <string> struct Foo { static int foo_xalloc; std::string data; Foo(const std::string& s) : data(s) {} }; // Allocates the iword storage for use with Foo objects int Foo::foo_xalloc = std::ios_base::xalloc(); // This user-defined operator<< prints the string in reverse if the iword holds 1 std::ostream& operator<<(std::ostream& os, Foo& f) { if (os.iword(Foo::foo_xalloc) == 1) return os << std::string(f.data.rbegin(), f.data.rend()); else return os << f.data; } // This I/O manipulator flips the number stored in iword between 0 and 1 std::ios_base& rev(std::ios_base& os) { os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc); return os; } int main() { Foo f("example"); std::cout << f << '\n' << rev << f << '\n' << rev << f << '\n'; }
出力
example elpmaxe example
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 36 | C++98 | 参照が無効になった場合、格納された値は保持されない可能性があります。 参照が無効になった場合 |
格納された値は保持されますcopyfmt() の次の呼び出しまで |
| LWG 41 | C++98 | 関数は、失敗時に badbit を設定しましたが、ios_base はそのようなインターフェースを提供していません。しかし、 ios_base はそのようなインターフェースを提供していません。 |
badbit は basic_ios によって設定されます(*this がその基底クラスサブオブジェクトである場合) |
[編集] 関連項目
| 必要に応じてプライベートストレージのサイズを変更し、指定されたインデックスの void* 要素にアクセスする (public メンバ関数) | |
| [static] |
プログラム全体で一意の整数を返します。これは pword() および iword() のインデックスとして安全に使用できます。 (public static メンバ関数) |