Черты - это способ «добавления» свойств к существующим типам.Допустим, мы создаем тип контейнера, который содержит typedef, чтобы сообщить свой содержащийся тип данных.Классический способ будет таким:
template <class T>
struct Cont { typedef T contained_type; }
Это имеет тот недостаток, что мы должны создать наш класс просто для того, чтобы содержать typedef - например.Контейнеры сторонних производителей и основные типы не могут использоваться кодом, который принимает тип Cont::contained_type
.Итак, мы вводим структуру признаков, которая добавляет косвенность в процессе:
template <class C>
struct container_traits; // this struct would contain the contained_type for container C
template <class T>
struct Cont { ... } // no typedef here
template <class T>
struct container_traits<Cont<T> >
{
typedef T contained_type; // by this, we say that the contained_type of Cont<T> is T
};
template <class T, unsigned N>
struct container_traits<T[N]>
{
// this is the advantage of traits - we can add information for arrays, which can have no member typedefs
typedef T contained_type;
};
Alos, шаблон признаков может быть параметром алгоритмов, использующих его, что позволяет нам использовать различные признаки с одним типом данных(см. класс std::string
).
Тем не менее, я не думаю, что черты имеют много общего с 64-битными системами.