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 の項を参照してください。