«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Каковы ограничения и возможности специализации в пространстве имен std?

Каковы ограничения и возможности специализации в пространстве имен std?

Опубликовано 15 ноября 2024 г.
Просматривать:914

 What are the Restrictions and Allowances for Specialization within the std Namespace?

Специализация в пространстве имен std: ограничения и разрешения

Несмотря на возможность добавлять явные специализации в пространство имен std, некоторые шаблоны имеют явные запреты . Понимание этих ограничений имеет решающее значение для обеспечения корректности кода, использующего стандартные специализации пространства имен.

Шаблоны, запрещенные для специализации

  • numeric_limits: Не разрешено для неарифметических стандартных типов (например, complex).
  • shared_ptr: Должно быть CopyConstructible, CopyAssignable, LessThanComparable и конвертироваться в bool.
  • weak_ptr: Должен быть CopyConstructible и CopyAssignable.
  • std::hash: Специализации должны соответствовать требованиям хеша шаблона класса.
  • type_traits : Явные специализации любых шаблонов классов в не определены, если не указано иное.
  • Локали: Имеют обязательные специализации.
  • istreambuf_iterator: Требуется тривиальный конструктор копирования, конструктор по умолчанию constexpr и тривиальный деструктор.
  • complex: Разрешены только специализации float, double и long double.
  • атомный: Специализации должны иметь удаленный конструктор копирования, оператор присваивания копирования и конструктор значения constexpr.
  • unary_function иbinary_function: Устарели и не должны быть специализированными.

Дополнительные ограничения

  • В соответствии с пунктом 17.6.4.2.1 поведение не определено при добавлении объявлений или определений в пространство имен std или его подпространства имен. Исключения применяются только для специализаций шаблонов, которые зависят от определяемых пользователем типов и соответствуют стандартным требованиям.
  • Запрещается явно специализировать любую функцию-член шаблона класса стандартной библиотеки, шаблона функции-члена или шаблона класса-члена.

Шаблоны, разрешенные для специализации

Шаблоны, не запрещенные явно, могут быть специализированными, если они зависят от пользовательских типов и соответствуют стандартным требованиям для исходного шаблона.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3