Типаж в C ++ инкапсулирует семейство операций, которые позволяют алгоритму или структуре данных работать с тем типом, с которым он создается. char_traits
- это пример группировки строковых
и функций, требующих файла.
Но не все черты имеют «черту» в своем имени, верно? На ум приходит numeric_limits
. Это тоже «Черта»? Даже без названия «черта»?
Итак, есть ли другие шаблоны, которые можно / следует считать «чертой»? Помимо найденных мной примеров:
allocator_traits
как получить память pointer_traits
как получить доступ к объекту косвенно type_traits
метапрограммирование char_taits
для последовательности символов iterator_traits
как перейти вперед, назад и к элементу regex_traits
для ... регулярных выражений. Думаю, я тоже спрашиваю, есть ли чистое определение для черт?
В некоторых вещах я особенно не уверен являются:
numeric_limits
, упомянутыми выше
"черты" настройки, [20.11.4], т.е. duration_values
hash <>
считаться признаком? Обновление: Вопрос о том, что именно делает черту чертой, кажется немного противоречивым в деталях. Может быть, можно было бы ответить на другой вопрос: Есть ли исчерпывающий список, какие из классов, подобных признакам, являются новыми для C ++ 0x, а какие уже были в C ++ 03? Может быть, кто-то знает о ссылка куда-нибудь?
Что касается других, я не могу комментировать, но когда сомневаюсь:
Думайте о признаке как о маленьком объекте, основная цель которого - нести информацию, используемую другим объектом или алгоритмом для определения «политики» или «деталей реализации». - Бьярн Страуструп
Обновление: , чтобы просто внести свой небольшой вклад в обширный список, который Говард предоставил:
У меня было неправильное впечатление, что черты типа и regex , являющиеся частью TR1, технически не являются частью нового набор признаков в C ++ 0x (даже несмотря на то, что типовые признаки были значительно расширены новым новым стандартом). См. Комментарий Говарда и разъяснения по этому поводу.
Мне очень нравится то, что мне нравится в новых типах классов enum, это
basic_type :: type, который дает тип спецификатора хранения класса enum
enum class My_Enum : unsigned int { ... }
underlying_type<My_Enum>::type -> unsigned int
Очень полезен в преобразованиях enum и сериализации.
Вот список попыток, разделенных на стандартные. Я вполне мог бы не заметить некоторых.
новые C ++ 11 черты:
is_error_code_enum
is_error_condition_enum
pointer_traits
allocator_traits
Just about everything in <type_traits>
treat_as_floating_point
duration_values
uses_allocator
regex_traits
C ++ 98/03 черты:
numeric_limits
char_traits
iterator_traits