namespace std { class locale::facet { protected: explicit facet(size_t refs = 0); virtual ~facet(); facet(const facet&) = delete; void operator=(const facet&) = delete; }; }
Класс facet - это базовый класс для наборов функций локали. Класс - это класс, facet если он является производным от другого аспекта или если он является производным от класса locale::facet и содержит следующее публично доступное объявление:231
static ::std::locale::id id;
Параметры шаблона в этом разделе, которые должны быть фасетами, являются теми, которые указаны Facet в объявлениях. Программа, которая передает тип, который является not фасетом, или тип, который ссылается на фасет с изменяемым атрибутом в качестве (явного или выведенного) параметра шаблона в функцию языкового стандарта, ожидающую фасета, имеет неправильный формат. Фасет с константой является допустимым аргументом шаблона для любой функции локали, которая ожидает параметр шаблона Facet.
refs Аргумент конструктора используется для управления жизненным циклом. Для refs == 0реализации выполняется delete static_cast<locale::facet*>(f) (где f - указатель на фасет), когда последний locale объект, содержащий фасет, уничтожается; ведь refs == 1реализация никогда не разрушает фасет.
Конструкторы всех фасетов, определенных в этом разделе, принимают такой аргумент и передают его конструктору своего facet базового класса. Все конструкторы с одним аргументом, определенные в этом разделе explicit, предотвращают их участие в автоматических преобразованиях.
Для некоторых стандартных аспектов…_bynameпроизводный от него стандартный класс « » реализует семантику виртуальных функций, эквивалентную этому аспекту локали, созданного locale(const char*) с помощью того же имени. Каждый такой аспект предоставляет конструктор, который принимает const char* аргумент, который называет локаль, и refs аргумент, который передается конструктору базового класса. Каждый такой аспект также предоставляет конструктор, который принимает string аргумент str и refs аргумент, который имеет тот же эффект, что и вызов первого конструктора с двумя аргументами str.c_str() и refs. Если нет «…_byname» версии фасета, базовый класс сам реализует именованную семантику локали, ссылаясь на другие фасеты.
Это полный список требований; других требований нет. Таким образом, класс фасета не обязательно должен иметь общедоступный конструктор копирования, присваивание, конструктор по умолчанию, деструктор и т. Д.