## 15.2 例: データ書式設定文字列の保存

11.3 節の、日付クラスに定義した挿入子と抽出子について説明では、入出力演算を国際化して日付の書式設定と構文解析のタスクをストリームのロケールに渡しました。ただし、書式設定と構文解析の規則を限定していたため、標準 C ライブラリの機能よりもはるかに制約がありました。

標準 C ライブラリでは、`prinft()` や `scanf()` のように、日付の構文解析や書式設定を行う書式設定文字列を指定することができます。23 たとえば、書式設定文字列 `"%A`, `%B %d, %Y"` は、日付を曜日、月の名前、日にち、年で構成し、Friday, July 12, 1996 という規則に基づいています。

ここでは、書式設定文字列などを指定できるようにして、日付クラスの入出力演算の方法に手を加えてみます。他の書式設定情報は、ストリームの書式状態に保存されています。したがって、日付の書式設定文字列もストリームのどこかに保存できるはずで、実際に可能です。

ストリームには、非公開になっている配列があります。配列要素は、`union` 型であり、`long` として、または `void` に対するポインタとして呼び出すことができます。24 配列のサイズは指定せず、新しいメモリーを必要に応じて割り当てます。基本的に、そのサイズは無限長と考えることができます。

この配列は、必要なその他のあらゆる情報と共に、ストリームへの保存に使用します。このマニュアルの例では、書式設定文字列を保存しています。

配列は、2 つの関数 `iword()` と `pword()` で呼び出すことができます。どちらの関数も配列要素に対するインデックスを必要とし、各要素までの参照を返します。関数 `iword()` は、`long` に対する参照を返します。関数 `pword()` では、`void` に対するポインタとして配列を呼び出すことができます。

配列に対するインデックスは、`xalloc()` 関数で管理します。これは、クラス `ios_base` の静的関数であり、配列に対する次の空きインデックスを返します。

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。

OEM リリース, 1998 年 6 月