## 17.2 traits 手法の使用方法

traits パラメータをクラスに実装するには、これを特殊テンプレートパラメータとしてクラスに追加します。 次に、特定のすべての演算をカプセル化するパラメータのクラスを指定します。 通常、このクラスはそれ自体がテンプレートです。

17.1 節で説明したマトリックスの問題を例に挙げます。マトリックスに新しい型を追加する場合、traits 手法を使用して、マトリックス全体ではなく traits クラスだけを特殊化します。必要な操作はこれだけなので、マトリックスを妥当な数値に使用する能力は保持されます。

以下の例で、`long` と `int` について、マトリックス traits テンプレートと特殊化がどのように記述されるかを示します。この例には、traits テンプレートを使用するマトリックスクラスのスケルトンも含まれます。

    template <class Num>
    class matrix_traits
    {
      // traits 関数とリテラル
    };

    template <class Num, class traits>
    class matrix
    {
      // マトリックス
    }

    class matrix_traits<long>
    {
      // long に固有の traits 関数とリテラル
    };

    class matrix_traits<int>
    {
      // int に固有の traits 関数とリテラル
    };

     etc.

    matrix<int, matrix_traits<int> > int_matrix;
    matrix<long, matrix_traits<long> > long_matrix;

`matrix_traits` を特殊化する必要はありません。ユーザーに要求されるのは、`matrix` がその traits テンプレートパラメタから期待するインタフェースを確実に提供することだけです。

ほとんどの場合、traits クラスに含まれる演算は静的関数なので、実際には traits オブジェクトをインスタンス化する必要はありません。

標準ライブラリは、この手法を使用して string クラスに広範な型に及ぶ最大の柔軟性と効率を与えます。char_traits traits クラスは、文字列での基本演算を提供します。最も単純な例を挙げると、文字列 `wstring` に、たとえば `Strcpy` や `wcstrcpy`などの 1 バイト文字およびワイド文字の `C' ライブラリ関数へのアクセスを提供します。

traits クラスの詳細については、『標準 C++ クラスライブラリ・リファレンス』の char_traits の項を参照してください。

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