Какие «черты» используются / определены в стандарте C ++ 0x

Типаж в 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 <> считаться признаком?
  • Если это так, то не все ли требования являются «признаками», такими как «CopyAssignable» и т. Д.?
  • И затем,Являются ли заброшенные «Концепции» окончательной «чертой» -Определением?

Обновление: Вопрос о том, что именно делает черту чертой, кажется немного противоречивым в деталях. Может быть, можно было бы ответить на другой вопрос: Есть ли исчерпывающий список, какие из классов, подобных признакам, являются новыми для C ++ 0x, а какие уже были в C ++ 03? Может быть, кто-то знает о ссылка куда-нибудь?

24
задан towi 29 April 2012 в 12:33
поделиться

3 ответа

  • * numeric_limits * определенно представляет набор характеристик для числовых типов.
  • все требования, такие как «CopyAssignable» и т. Д., Действительно являются чертами, см. эту статью о чертах

    Что касается других, я не могу комментировать, но когда сомневаюсь:

    Думайте о признаке как о маленьком объекте, основная цель которого - нести информацию, используемую другим объектом или алгоритмом для определения «политики» или «деталей реализации». - Бьярн Страуструп

    Обновление: , чтобы просто внести свой небольшой вклад в обширный список, который Говард предоставил:

  • связанные со временем черты
  • черты regex

У меня было неправильное впечатление, что черты типа и regex , являющиеся частью TR1, технически не являются частью нового набор признаков в C ++ 0x (даже несмотря на то, что типовые признаки были значительно расширены новым новым стандартом). См. Комментарий Говарда и разъяснения по этому поводу.

8
ответ дан 29 November 2019 в 00:16
поделиться

Мне очень нравится то, что мне нравится в новых типах классов enum, это

basic_type :: type, который дает тип спецификатора хранения класса enum

enum class My_Enum : unsigned int { ... }

underlying_type<My_Enum>::type -> unsigned int

Очень полезен в преобразованиях enum и сериализации.

1
ответ дан 29 November 2019 в 00:16
поделиться

Вот список попыток, разделенных на стандартные. Я вполне мог бы не заметить некоторых.

новые 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
10
ответ дан 29 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: