как работают classы признаков?

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

Возможно, вы ожидаете какой-то магии, которая заставляет черты характера работать. В таком случае будьте разочарованы – нет волшебства. Типы типов определяются вручную для каждого типа. Например, рассмотрим iterator_traits , который предоставляет typedefs (например, value_type ) для iteratorов.

Используя их, вы можете написать

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

Но чтобы сделать эту работу, на самом деле есть явное определение где-нибудь в заголовке , который читает что-то вроде этого:

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

Это частичная специализация типа iterator_traits для типов формы T* , то есть указателей некоторого родового типа.

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

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

Давайте будем гением компьютера.