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
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::iterator>::value_type x;
iterator_traits::value_type y;
// `x` and `y` have type int.
But to make this work, there is actually an explicit definition somewhere in the header, which reads something like this:
template
struct iterator_traits {
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.