## 17.2 基底クラスの選択

まず、標準ストリームクラスのどれを基底クラスにするかを考慮します。これは、これから行う追加や変更の種類によって異なります。今回の例では、書式設定情報を追加します。書式設定文字列は 1 バイト文字のシーケンスなので、書式設定情報はストリームの文字型によって異なります。後で説明しますが、ストリームのロケールで使用する場合、書式設定文字列はストリームの文字型のシーケンスに展開する必要があります。したがって、`basic_iostream <charT,Traits>` を基底クラスに選択すべきですが、書式設定文字列は出力演算に反映するだけなので、`basic_ostream <charT,Traits>` が最善の選択肢になります。

一般に、基底クラスの選択では、追加や変更の種類を考慮し、ストリームクラスの特性と比較します。

- ストリームの文字型に依存しない情報とサービスを追加する場合は、`ios_base` を選択します。
- 追加した情報が文字型に依存する場合や、ストリームバッファなどの `ios_base` で得られない情報が必要な場合は、`basic_ios<charT, Traits>` を選択します。
- 入力演算や出力演算の追加や変更の場合は、ストリームクラス `basic_istream <charT,Traits>`、`basic_ostream <charT,Traits>、`か、 `basic_iostream <charT, Traits>` から派生させます。
- ファイルの開き方など、ファイルや文字列関連の動作の追加や変更の場合は、ストリームクラス `basic_(i/o)fstream <charT,Traits>` か、`basic_(i/o)stringstream <charT, Traits, Allocator>` から派生させます。

`入出力演算の変更や追加が多いため、basic_istream <charT,Traits>`、`basic_ostream <charT,Traits>`、`basic_iostream <charT, Traits>` からの派生が最も一般的です。

`ios_base` や `basic_ios<charT, Traits>` から派生させると、入力演算や出力演算が継承されません。すべてを実装し直す場合や、書式設定をしないバイナリ入力や出力など、まったく種類の異なる入出力演算を実装する場合に適した方法です。

`basic_(i/o)fstream <charT,Traits>` や `basic_(i/o)stringstream <charT, Traits, Allocator>` など、ファイルストリームや文字列ストリームからの派生は、ファイルや文字列に関連したデータやサービスの追加や変更以外では意味をなさないため、いずれも一般的ではありません。

> 注: 新しいストリームクラスを派生させるときは、他に特別の理由がなければ、basic_istream <charT,Traits>、basic_ostream <charT,Traits>、basic_iostream <charT, Traits> を基底クラスとして選択してください。

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

OEM リリース, 1998 年 6 月