namespace std { template <class charT> class ctype : public locale::facet, public ctype_base { public: using char_type = charT; explicit ctype(size_t refs = 0); bool is(mask m, charT c) const; const charT* is(const charT* low, const charT* high, mask* vec) const; const charT* scan_is(mask m, const charT* low, const charT* high) const; const charT* scan_not(mask m, const charT* low, const charT* high) const; charT toupper(charT c) const; const charT* toupper(charT* low, const charT* high) const; charT tolower(charT c) const; const charT* tolower(charT* low, const charT* high) const; charT widen(char c) const; const char* widen(const char* low, const char* high, charT* to) const; char narrow(charT c, char dfault) const; const charT* narrow(const charT* low, const charT* high, char dfault, char* to) const; static locale::id id; protected: ~ctype(); virtual bool do_is(mask m, charT c) const; virtual const charT* do_is(const charT* low, const charT* high, mask* vec) const; virtual const charT* do_scan_is(mask m, const charT* low, const charT* high) const; virtual const charT* do_scan_not(mask m, const charT* low, const charT* high) const; virtual charT do_toupper(charT) const; virtual const charT* do_toupper(charT* low, const charT* high) const; virtual charT do_tolower(charT) const; virtual const charT* do_tolower(charT* low, const charT* high) const; virtual charT do_widen(char) const; virtual const char* do_widen(const char* low, const char* high, charT* dest) const; virtual char do_narrow(charT, char dfault) const; virtual const charT* do_narrow(const charT* low, const charT* high, char dfault, char* dest) const; }; }
Класс ctype инкапсулирует библиотеки C <cctype> функции. istream члены должны использоваться ctype<> для классификации символов во время синтаксического анализа входных данных.
Специализации, требуемые в Table69 ([locale.category]), а именно ctype<char> и ctype<wchar_t>, реализуют классификацию символов, соответствующую собственному набору символов реализации.
bool is(mask m, charT c) const;
const charT* is(const charT* low, const charT* high,
mask* vec) const;
const charT* scan_is(mask m,
const charT* low, const charT* high) const;
const charT* scan_not(mask m,
const charT* low, const charT* high) const;
charT toupper(charT) const;
const charT* toupper(charT* low, const charT* high) const;
charT tolower(charT c) const;
const charT* tolower(charT* low, const charT* high) const;
charT widen(char c) const;
const char* widen(const char* low, const char* high, charT* to) const;
char narrow(charT c, char dfault) const;
const charT* narrow(const charT* low, const charT* high, char dfault,
char* to) const;
bool do_is(mask m, charT c) const;
const charT* do_is(const charT* low, const charT* high,
mask* vec) const;
Effects: Классифицирует символ или последовательность символов. Для каждого символа аргумента определяет значение M типа ctype_base::mask. Вторая форма определяет значениеM типа ctype_base::mask для каждого *p where (low <= p && p < high)и помещает его в vec[p - low].
Returns: Первая форма возвращает результат выражения (M & m) != 0; то есть, true если персонаж имеет указанные характеристики. Вторая форма возвращаетсяhigh.
const charT* do_scan_is(mask m, const charT* low, const charT* high) const;
Returns: Наименьший указательp в диапазоне [low, high) , который is(m, *p) будет возвращать true; в противном случае возвращаетсяhigh.
const charT* do_scan_not(mask m, const charT* low, const charT* high) const;
Returns: Наименьший указательp, если таковой имеется, в диапазоне [low, high) , который is(m, *p) может возвращать false; в противном случае возвращаетсяhigh.
charT do_toupper(charT c) const;
const charT* do_toupper(charT* low, const charT* high) const;
Effects: Преобразует символ или символы в верхний регистр. Вторая форма заменяет каждый символ *p в диапазоне, [low, high) для которого существует соответствующий символ верхнего регистра, этим символом.
Returns: Первая форма возвращает соответствующий символ верхнего регистра, если известно, что он существует, или его аргумент, если нет. Вторая форма возвращаетсяhigh.
charT do_tolower(charT c) const;
const charT* do_tolower(charT* low, const charT* high) const;
Effects: Преобразует символ или символы в нижний регистр. Вторая форма заменяет каждый символ *p в диапазоне, [low, high) для которого существует соответствующий символ нижнего регистра, на этот символ.
Returns: Первая форма возвращает соответствующий символ нижнего регистра, если известно, что он существует, или его аргумент, если нет. Вторая форма возвращаетсяhigh.
charT do_widen(char c) const;
const char* do_widen(const char* low, const char* high,
charT* dest) const;
Effects: Применяет простейшее разумное преобразование char значения или последовательности char значений в соответствующее charT значение или значения.233 Единственные символы, для которых требуются уникальные преобразования, - это символы вbasic source character set.
Для любого имени ctype категории с ctype <charT> фаскойctc и действительным ctype_base::mask значениемM, (ctc.is(M, c) || !is(M, do_widen(c)) ) является true.234
Вторая форма преобразует каждый символ *p в диапазоне [low, high), помещая результат в dest[p - low].
char do_narrow(charT c, char dfault) const;
const charT* do_narrow(const charT* low, const charT* high,
char dfault, char* dest) const;
Effects: Применяет простейшее разумное преобразование charT значения или последовательности charT значений в соответствующее char значение или значения.
Для любого символаc в basic source character set преобразовании таково, что
do_widen(do_narrow(c, 0)) == c
Для любого имени ctype категории с ctype<char> фаскойctc однако, и ctype_base::mask значениемM,
(is(M, c) || !ctc.is(M, do_narrow(c, dfault)) )
есть true (если не do_narrow возвращается dfault). Кроме того, для любого цифрового символаcвыражение (do_narrow(c, dfault) - '0') оценивается как цифровое значение символа. Вторая форма преобразует каждый символ *p в диапазоне [low, high), помещая результат (или,dfault если простое преобразование недоступно) в dest[p - low].
Returns: Первая форма возвращает преобразованное значение; илиdfault если нет доступного отображения. Вторая форма возвращаетсяhigh.
Аргумент char do_widen предназначен для приема значений, полученных из символьных литералов, для преобразования в кодировку языкового стандарта.
Другими словами, преобразованный символ не является членом какой-либо классификации символов, котораяc также не является членом.