На этом шаге мы рассмотрим способы интернационализации специальных символов.
При рассказе об интернационализации остался без ответа один важный вопрос: как интернационализируются специальные символы (например, символ \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)
Подробности работы с локальными контекстами и их фацетами будут представлены в следующих шагах.
На следующем шаге мы рассмотрим концепцию локального контекста.