## 20.3 ユーザー定義の型でインスタンス化したストリームの作成と使用

すべてのサポート作業が終了すると、ユーザー定義の型にストリームクラステンプレートのインスタンスを生成し、使用することができますが、まだ完全ではありません。新しいストリームは、ユーザーが定義した新しいファセットを要求しますが、そのためには、そのファセットをおさめるロケールを作成し、それをストリームのロケールに組み込む必要があります。次にその方法を示します。

>     typedef basic_fstream<Echar,Etraits> Estream;                // 1
>     locale Eloc(locale(locale(),new Ecodecvt),new Ectype);       // 2
>     Estream foo("foo.txt");                                      // 3
>     foo.imbue(Eloc);                                             // 4

//1 | 特別なストリーム型を、適当な別の型に typedef で定義します。
//2 | 新しいロケールオブジェクトを作成し、`codecvt` ファセットと `ctype` ファセットを、`Echar` に定義したファセットに置き換えます。既存のロケールと新しいファセットを呼び出すコンストラクタで新しい `codecvt` ファセットのロケールを作成し、それを利用して、両方とも新しいファセットのロケールを作成します。
//3 | `Estream` を構築します。
//4 | 置換ファセットを組み込んだロケールを `Estream` に組み込みます。

以上で、`Echar` をストリームに挿入して、再び読み出す準備ができました。

>     Echar e[10];
>     Estream::pos_type pos = foo.tellp();                           //1
>     foo << 10;                                                     //2
>     foo.seekg(pos);                                                //3
>     foo >> e;                                                      //4

//1 | 現在の位置を呼び出します。
//2 | 整数 `10` を書き込みます。
//3 | シークバックします。
//4 | `Echar`s として文字列 `10` を 読み取ります。

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

OEM リリース, 1998 年 6 月