Шаг 547.
Библиотека STL. Интернационализация. Классификация и преобразования символов. Специализации ctype для типа char

    На этом шаге мы рассмотрим использование фацета ctype.

    Чтобы повысить эффективность работы функций классификации символов, фацет ctype специализируется для типа символов char. Специализация не перепоручает функции классификации символов (is(), scan() и scan_not()) соответствующим виртуальным функциям. Вместо этого задействуется непосредственная реализация функций с использованием поиска по таблице категорий, для чего в фацете определяются дополнительные члены (таблица 1).

Таблица 1. Дополнительные члены ctype<char>
Выражение Описание
ctype<char>::table_size Размер таблицы (>=256)
ctype<char>::classlc_table() Возвращает таблицу категорий для "классического" локального контекста С
ctype<char>(table, del=false) Создает фацет с таблицей категорий table
ct.table() Возвращает текущую таблицу категорий для фацета ct

    Чтобы изменить поведение этих функций для конкретного локального контекста, передайте соответствующую таблицу категорий в аргументе конструктора:

// Создание и инициализация таблицы
std::ctype_base::mask mytable[std::ctype<char>::table_size] = {
  .   .   .   .
}
// Использовать таблицу для фацета ct типа ctype<char> 
std::ctype<char> ct(mytable,false);

    Фрагмент конструирует фацет ctype<char>, который классифицирует символы по таблице mytable. Точнее говоря, класс символа с определяется выражением:

  mytable[static_cast<unsigned char>(c)]

    Статическая переменная table_size является константой, определенной реализацией библиотеки и хранящей размер таблицы категорий. Таблица должна содержать не менее 256 символов. Второй необязательный аргумент конструктора ctype<char> указывает, должна ли таблица удаляться при уничтожении фацета. Если аргумент равен true, то переданная конструктору таблица освобождается прн вызове delete[], когда фацет становится ненужным.

    Защищенная функция table() возвращает таблицу, переданную в первом аргументе конструктора. Статическая защищенная функция classic_table() возвращает таблицу, используемую для классификации символов в классическом локальном контексте С.

    На следующем шаге мы рассмотрим глобальные вспомогательные функции классификации символов.




Предыдущий шаг Содержание Следующий шаг