## 20.1 ユーザー定義の文字型

テンプレートによる新しい入出力ストリームには、ユーザー定義の文字型が格納されていることも、在来型入出力ストリームとは基本的に異なる点です。新しい入出力ストリームでは、通常の `char` だけでなく、任意の文字型に似た C++ 入出力ストリームのインタフェースを使用することができるようになりました。

この柔軟性を得るためには条件があります。ユーザー定義の文字型には、厳しい制約が課せられるようになりました。ほとんどの状況で、型は通常の `char` として動作することを求められます。また、入出力ストリームの環境で型をサポートするためには、いくつかのクラスを定義する必要があります。

### 20.1.1 ユーザー定義の文字型の条件

一般に、ユーザー定義の文字型は、次の条件を満たす必要があります。

- 公開デフォルトコンストラクタが必要
- 公開コピーコンストラクタが必要
- 公開デストラクタが必要
- int と互換性があること
- 割り当て可能であること
- 等価性と順序に互換性があること

さらに、ユーザー定義の型のオブジェクトと `char` 型のオブジェクトの間の変換ができることが求められます。このような個々の変換機能を、型自体の一部分とする必要はありません。これらの変換機能は、新しい型に必要な新しい文字分類ファセットの一部として定義します。これらの変換機能については、この後で説明します。

次の型は、ユーザー定義の型の条件を満たします。

>     struct Echar
>     {
>       Echar():c(0),i(0) {;}
>       Echar(char cc):c(cc),i(0) {;}
>       Echar(char cc,char ii):c(cc),i(ii) {;}
>       operator int() { return c; }
>       char c;
>       char i;
>     };

>     bool operator==(const Echar& lhs, const Echar& rhs)
>     { return lhs.c == rhs.c; }

>     bool operator!=(const Echar& lhs, const Echar& rhs)
>     { return !(lhs.c == rhs.c); }

>     bool operator<(const Echar& lhs, const Echar& rhs)
>     { return lhs.c < rhs.c; }

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

OEM リリース, 1998 年 6 月