Черты - это способ добавления свойств к существующим типам. Предположим, мы создаем тип контейнера, который содержит typedef для указания его содержимого. Классический способ будет:
template <class T>
struct Cont { typedef T contained_type; }
Это имеет тот недостаток, что мы должны создать наш класс только содержать ЬурейеЕ - например. сторонние контейнеры и базовые типы не могут использоваться кодом, который предполагает тип 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-битными системами.
Можете ли вы рассказать о том, какие именно «флаги» вы использовали и почему вы их использовали? Понимание особенностей поможет нам дать ответ, который имеет больше смысла для вас. Кроме того, вы должны указать, к чему относятся 'pos_type' и' off_type', о которых вы ссылаетесь в своем названии. – JaredC
Я решил проблему с большой поддержкой файлов, этот вопрос не об этом. Теперь я пытаюсь понять, каковы черты и как их использовать в STL. Что касается вашего вопроса, я добавил некоторые объяснения. – Ali