67

ScottMeyersのEffectiveC++を読んでいます。彼はトレイトクラスについて話していて、コンパイル時にオブジェクトのタイプを決定するためにそれらが必要であることを理解しましたが、これらのクラスが実際に何をするかについての彼の説明を理解できませんか?(技術的な観点から)

4

2 に答える 2

54

おそらく、型の特性を機能させる魔法のようなものを期待しているでしょう。その場合、がっかりしてください – 魔法はありません。型特性は、型ごとに手動で定義されます。たとえば、イテレータにiterator_traitstypedef (たとえば ) を提供する を考えてみましょう。value_type

それらを使用して、書くことができます

iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.

しかし、これを機能させるために、実際にはヘッダーのどこかに次のような明示的な定義があります。<iterator>

template <typename T>
struct iterator_traits<T*> {
    typedef T value_type;
    // …
};

これは、フォームの型、つまりジェネリック型のポインターに対する型の部分的な特殊化です。iterator_traitsT*

同じように、iterator_traits他のイテレータに特化していますtypename vector<T>::iterator

于 2010-10-20T18:18:56.410 に答える
43

特性クラスは、オブジェクトのタイプを決定しません。代わりに、通常は特性内で typedef または定数を定義することにより、型に関する追加情報を提供します。

于 2010-10-20T15:58:06.533 に答える