Подтвердить что ты не робот

Как работают классы черт и что они делают?

Я читаю " Эффективность Скотта Мейерса" C++. Он говорит о классах черт, я понял, что они мне нужны, чтобы определить тип объекта во время компиляции, но я не могу понять его объяснение того, что на самом деле делают эти классы? (с технической точки зрения)

4b9b3361

Ответ 1

Возможно, вы ожидаете какую-то магию, которая заставляет черты характера работать. В таком случае будьте разочарованы - нет волшебства. Типы типов определяются вручную для каждого типа. Например, рассмотрим iterator_traits, который предоставляет typedefs (например, 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_traits для типов формы T*, то есть указатели какого-то общего типа.

В том же ключе iterator_traits специализированы для других итераторов, например. typename vector<T>::iterator.

Ответ 2

Классы классов не определяют тип объекта. Вместо этого они предоставляют дополнительную информацию о типе, как правило, путем определения typedefs или констант внутри признака.