std::codecvt<InternT,ExternT,StateT>::unshift, do_unshift
Определён в заголовочном файле <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 | не требуется |
См. также
| преобразует широкий символ в его многобайтовое представление с учётом состояния (функция) |
|
|
[виртуальная] | преобразует строку из InternT в ExternT, например при записи в файл (виртуальная защищённая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/codecvt/unshift