60


15

特性クラスはどのように機能しますか?

Scott Meyersのhttp://rads.stackoverflow.com/amzn/click/0321334876[_Effective C ++ _]を読んでいます。 彼は特性クラスについて話しているので、コンパイル時にオブジェクトのタイプを判別する必要があることは理解しましたが、これらのクラスが実際に何をするかについての彼の説明は理解できませんか? (技術的な観点から)

2 Answer


49


型特性を機能させる何らかの魔法を期待しているのかもしれません。 その場合、がっかりしてください。魔法はありません。 タイプ特性は、各タイプに対して手動で定義されます。 たとえば、typedefを提供する `iterator_traits`を考えます(例: イテレータの場合は「value_type」)。

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

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

しかし、これを機能させるために、実際には_ヘッダーのどこかに_explicit definition_があり、次のようになります:

template
struct iterator_traits {
    typedef T value_type;
    // …
};

これは、「T *」形式の型の「iterator_traits」型の「部分的な特殊化」です。 ジェネリック型のポインター。

同様に、 `iterator_traits`は他のイテレーターに特化しています。 `typename vector

iterator`。


41


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