25 Localization library [localization]

25.3 Locales [locales]

25.3.1 Class locale [locale]

25.3.1.1 locale types [locale.types]

25.3.1.1.2 Class locale​::​facet [locale.facet]

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» версии фасета, базовый класс сам реализует именованную семантику локали, ссылаясь на другие фасеты.

Это полный список требований; других требований нет. Таким образом, класс фасета не обязательно должен иметь общедоступный конструктор копирования, присваивание, конструктор по умолчанию, деструктор и т. Д.