20 Library introduction [library]

20.4 Method of description (Informative) [description]

20.4.1 Structure of each clause [structure]

20.4.1.3 Requirements [structure.requirements]

Требования описывают ограничения, которым должна соответствовать программа C ++, расширяющая стандартную библиотеку. Такие расширения обычно являются одним из следующих:

  • Аргументы шаблона

  • Производные классы

  • Контейнеры, итераторы и алгоритмы, соответствующие соглашению об интерфейсе

Компоненты string и iostream используют явное представление операций, требуемых от аргументов шаблона. Они используют шаблон класса char_­traits для определения этих ограничений.

Требования соглашения об интерфейсе сформулированы как можно более широко. Вместо того , заявив , что «класс X должен определить функцию - член operator++()», интерфейс требует «для любого объекта x класса X, ++x определяется». То есть, является ли оператор членом, не указано.

Требования сформулированы в виде четко определенных выражений, которые определяют действительные термины типов, удовлетворяющих требованиям. Для каждого набора четко определенных требований к выражениям существует таблица, в которой указывается начальный набор допустимых выражений и их семантика. Любой общий алгоритм (пункт [algorithms]), который использует четко определенные требования к выражениям, описывается в терминах допустимых выражений для параметров его типа шаблона.

На требования к аргументам шаблона иногда ссылаются по имени. Смотрите [type.descriptions].

В некоторых случаях семантические требования представлены в виде кода C ++. Такой код предназначен как спецификация эквивалентности конструкции другой конструкции, не обязательно как способ реализации этой конструкции.156

Хотя в некоторых случаях приведенный код однозначно является оптимальной реализацией.