Namespaces
Variants

std::codecvt<InternT,ExternT,StateT>:: unshift, do_unshift

From cppreference.net
Определено в заголовочном файле <locale>
public :

result unshift ( StateT & state, ExternT * to, ExternT * to_end,

ExternT * & to_next ) const ;
(1)
protected :

virtual result do_unshift ( StateT & state, ExternT * to, ExternT * to_end,

ExternT * & to_next ) const ;
(2)
1) Открытая функция-член, вызывает функцию-член do_unshift самого производного класса.
2) Если кодировка, представленная этим фасетом codecvt , является зависимой от состояния, и state представляет состояние преобразования, отличное от начального состояния сдвига, записывает символы, необходимые для возврата в начальное состояние сдвига. Символы записываются в массив символов, первый элемент которого указывается to . Записывается не более to_end - to символов. Параметр to_next обновляется для указания на позицию после последнего записанного символа.

Содержание

Возвращаемое значение

Значение типа std::codecvt_base::result , указывающее статус выполнения следующим образом:

ok все необходимые символы были записаны. state теперь представляет начальное состояние сдвига
partial недостаточно места в выходном буфере. to_next == to_end
error произошла неуточненная ошибка
noconv кодировка не зависит от состояния, завершающая последовательность не требуется

Примечания

Эта функция вызывается std::basic_filebuf::close() и в других ситуациях при завершении многобайтовой последовательности символов, зависящей от состояния.

Пример

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 305 C++98 std:: codecvt < wchar_t , char , std:: mbstate_t > :: do_unshift
требовалось не записывать никаких символов
не требуется
LWG 380 C++98 значение возврата partial означало 'необходимо предоставить больше символов
для завершения преобразования', но символы не предоставлялись
исправлено на указание
недостаточного размера буфера
LWG 381 C++98 state не требовалось быть валидным, и
error возвращался если state невалиден
state требуется быть валидным, и
возврат error указывает на ошибку
LWG 664 C++98 std:: codecvt < char , char , std:: mbstate_t > :: do_unshift
требовалось не записывать никаких символов
не требуется
LWG 665 C++98 std:: codecvt < char , char , std:: mbstate_t > :: do_unshift
требовалось возвращать noconv
не требуется

Смотрите также

преобразует широкий символ в его многобайтовое представление с учётом состояния
(функция)
[virtual]
преобразует строку из InternT в ExternT , например при записи в файл
(виртуальная защищённая функция-член)