Существует ли сценарий декодирования 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 должен уметь переводить символы по одному внутреннему символу за раз

Похоже, что любой язык, который подходит для потоков ввода-вывода, также хорош для вашего использования.

Другие вопросы по тегам