How do traits classes work and what do they do?

前端 未结 2 888
醉话见心
醉话见心 2020-11-29 23:50

I\'m reading Scott Meyers\' Effective C++. He is talking about traits classes, I understood that I need them to determine the type of the object during compilation time, but

相关标签:
2条回答
  • 2020-11-30 00:05

    Traits classes do not determine the type of the object. Instead, they provide additional information about a type, typically by defining typedefs or constants inside the trait.

    0 讨论(0)
  • 2020-11-30 00:21

    Perhaps you’re expecting some kind of magic that makes type traits work. In that case, be disappointed – there is no magic. Type traits are manually defined for each type. For example, consider iterator_traits, which provides typedefs (e.g. value_type) for iterators.

    Using them, you can write

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

    But to make this work, there is actually an explicit definition somewhere in the <iterator> header, which reads something like this:

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

    This is a partial specialization of the iterator_traits type for types of the form T*, i.e. pointers of some generic type.

    In the same vein, iterator_traits are specialized for other iterators, e.g. typename vector<T>::iterator.

    0 讨论(0)
提交回复
热议问题