Шаг 529.
Библиотека STL. Интернационализация. Различия в кодировках символов. Интернационализация специальных символов

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

    При рассказе об интернационализации остался без ответа один важный вопрос: как интернационализируются специальные символы (например, символ \n)? Класс basic_ios содержит функции widen() и narrow(), которые могут использоваться для этой цели. Например, символ новой строки в кодировке, соответствующей формату потока данных strm, может записываться следующим об-разом:

strm.widen('\n');   // Интернационализированный символ новой строки

    Символ конца строки в этой же кодировке выглядит так:

strm.widen('\0');   // Интернационализированный завершитель строк

    За примером обращайтесь к реализации манипулятора endl на 482 шаге.

    Функции widen() и narrow() используют объект локального контекста, а говоря точнее - фацет ctype этого объекта. Фацет может потребоваться для преобразования символов между char и другим представлением. Например, следующее выражение преобразует символ с типа char в объект типа char_type с использованием объекта локального контекста loc:

std::use_facet<std::ctype<char_type> >(loc).widen(c)


   Замечание. Обратите внимание на пробел между символами >. Последовательность > воспринимается компилятором как оператор сдвига, что приводит к синтаксической ошибке.

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

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




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