Существует ли сценарий декодирования codecvt, где целевому буферу требуется место для более чем одного внутреннего символа?
Когда используешь std::codecvt
"s in
метод для декодирования внешней последовательности байтов во внутреннюю последовательность символов, существует ли ситуация, когда буферу назначения внутренних символов требуется пространство для более чем одного внутреннего символа?
Вот код для справки:
// const std::locale& loc;
// mbstate_t state;
// const char *extern_buf_ptr;
// const char *extern_buf_eptr;
const std::codecvt<wchar_t, char, mbstate_t> *pcodecvt = &std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >(loc);
wchar_t intern_char;
wchar_t *tmp;
std::codecvt_base::result in_res = pcodecvt->in(state,
extern_buf_ptr, extern_buf_eptr, extern_buf_ptr,
&intern_char, &intern_char + 1, tmp);
Это упрощение некоторого кода шаблона, который я написал для декодирования байтов, считываемых по отдельности из Winsock SOCKET
где пользователь желает "небуферизованного" ввода. По сути, с каждой итерацией цикла байт считывается во внешний буфер. Цикл завершается, когда in_res
не является std::codecvt_base::partial
,
Что мне интересно, так это: есть ли сценарий, когда in()
потребуется место в буфере назначения для более чем одного внутреннего символа? Т.е. есть ли сценарий, который бы сделал описанный выше цикл бесконечным циклом?
1 ответ
В записке есть §22.4.1.4.2/3
в такой степени:
basic_filebuf
предполагает, что сопоставления от внутренних до внешних символов1
вN
:codecvt
аспект, который используетсяbasic_filebuf
должен уметь переводить символы по одному внутреннему символу за раз
Похоже, что любой язык, который подходит для потоков ввода-вывода, также хорош для вашего использования.