Наверх с массивом char16_t

Есть ли способ сделать это красиво. Когда я пытаюсь использовать Boost's to_upper()Я получаю std::bad_castИтак, я закончил что-то вроде этого:

while(str[i]!=u'\0')
{
    str[i]=(char16_t)to_upper((wchar_t)str[i]);
    i++;
}

Я даже не уверен, что это правильно, потому что я не знаю, гарантируется ли это, что to_upper из char16_t имеет тот же размер, что и оригинальный персонаж. И я не уверен, что это приведет к перезаписи следующего символа или повторному чтению второй половины последнего обработанного символа. Извините за мои глупые вопросы, но у меня есть проблемы, когда дело доходит до произвольного доступа и типов символов, которые имеют кодировки переменной длины.

1 ответ

Решение

Лучший способ сделать это, вероятно, что-то вроде этого:

char16_t upper = std::use_facet<std::ctype<char16_t>>(std::locale()).toupper(ch);
Другие вопросы по тегам