На этом шаге мы рассмотрим использование фацета ctype.
Чтобы повысить эффективность работы функций классификации символов, фацет ctype специализируется для типа символов char. Специализация не перепоручает функции классификации символов (is(), scan() и scan_not()) соответствующим виртуальным функциям. Вместо этого задействуется непосредственная реализация функций с использованием поиска по таблице категорий, для чего в фацете определяются дополнительные члены (таблица 1).
Выражение | Описание |
---|---|
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() возвращает таблицу, используемую для классификации символов в классическом локальном контексте С.
На следующем шаге мы рассмотрим глобальные вспомогательные функции классификации символов.