## 6.3 標準入出力ストリームのヘルプによる問題の解決

入出力ストリームは、さまざまな状況で利用することができます。

- ファイル入出力。ファイル入出力には、以前ほどの重要性はありませんが、いまだに入出力ストリームは、ファイルへの入出力に使用されています。以前は、標準入出力チャンネルへのファイル入出力を利用した、英数字ユーザーインタフェースの構築が一般的でした。今日では、ほとんどすべてのアプリケーションでグラフィカルユーザーインタフェースが使用されています。
  それでも、標準入出力チャンネル以外のファイルに対する入出力や、ファイル抽象化に適した外部媒体に対する入出力には、入出力ストリームが有用です。たとえば、ネットワーク通信プログラミング用の Rogue Wave クラスライブラリである Net.h++ では、ソケットやパイプなどさまざまな通信ストリームに対する入出力に、入出力ストリームを使用しています。
- メモリー内入出力。入出力ストリームでは、メモリー内書式設定と構文解析を行うことができます。グラフィカルユーザーインタフェースでも、表示するテキストには書式設定が必要です。標準入出力ストリームには国際化メモリー内入出力の機能があり、書式設定などのテキスト処理作業には大変有用です。たとえば、数値の書式設定は、文化的な規約によって異なります。書式設定層では、ロケールの数値ファセットで書式設定と構文解析を文化的規約に対応させています。
- 国際化テキスト処理。この機能は、入出力ストリームで積極的に対応しています。入出力ストリームではロケールを使用します。ロケールは拡張性があるので、どのようなファセットでもロケールに組み込むことができ、さらにはストリームに利用することができます。デフォルトでは、入出力ストリームには 1 つのロケールで、数値とコードの変換ファセットしか使用しません。しかし、標準 C++ ライブラリでは、日付、時間、通貨の各ファセットを利用することができます。他の文化に依存する情報は、固有のファセットにカプセル化して、ストリームにアクセスできるように設定します。使用する入出力ストリームは、それぞれのニーズに合わせて簡単に国際化することができます。
- バイナリ入出力。従来の入出力ストリームには、さまざまな制約がありました。最大の制約は変換機能の欠落です。たとえば、 `double` をストリームに挿入しても、外部デバイスでこの `double` がどのような表現になるかを指定することはできませんでした。バイナリとしてこのデータを挿入する移植方法がなかったためです。
  標準入出力ストリームには、はるかに柔軟性があります。内部データを外部デバイスに転送するときに行われるコード変換は、カスタマイズすることができます。移送層で必要な変換作業は、コード変換ファセットで行います。移植可能なバイナリデータ交換書式で `double` をファイルストリームに挿入すれば、バイナリ出力に適したコード変換ファセットがストリームに用意されます。標準ライブラリにはこのようなコード変換ファセットはなく、さらに、そのようなファセットを実装するのは意味のないことです。別の方法としては、バイナリ入出力を処理できるストリームバッファ層全体を実装することも可能です。
- 入出力ストリームの拡張。入出力ストリームは、ある意味では拡張やカスタマイズができる枠組みだと考えることができます。ユーザー定義の型に入力演算子と出力演算子を追加したり、ユーザー定義の書式設定要素、すなわちマニピュレータを追加することができます。また、特殊化したストリームバッファと共に、ストリーム全体を特殊化することもできます。さまざまな文化的な規約を表現したり、特別な用途のファセットを格納するために、さまざまなロケールを使用します。`char` や `wchar_t` 以外にも、新しい文字型に入出力ストリームクラスのインスタンスを生成することができます。

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

OEM リリース, 1998 年 6 月