Как сохранить несколько символов utf8 (uint32_ts) из utfcpp в виде строки? - PullRequest
0 голосов
/ 18 мая 2018

Используя utfcpp lib, можно разбить строку ('哈哈哈'), закодированную в utf8, на несколько uint32_t s (или символов (21704, 21704, 21704)), которые действуют как char s для std::string.

В этой ситуации, какое лучшее решение хранит последовательности uint32_t («символьные») (в виде «строки»)?

Например, поместив (21704, 21704, 21704) в vector<uint32_t> потребуется итерация вектора для «сравнения строк», которое кажется на медленнее , чем реальная версия std::string.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Современные версии C ++ поставляются с char16_t и char32_t.Они должны быть предпочтительнее типов uintxx_t, потому что в пункте 24.2 черты характера [char.traits] требуется определение специализации char_traits для него:

В этом подпункте определяются требования к классам, представляющим черты характера,и определяет шаблон класса char_traits<charT> вместе с четырьмя специализациями char_traits<char>, char_traits<char16_t>, char_traits<char32_t> и char_traits<wchar_t>, которые удовлетворяют этим требованиям.

Это даже обеспечивает немедленный доступ* basic_string специализация: 24.3. Строковые классы [string.classes]:

. Заголовок <string> определяет шаблон класса basic_string для манипулирования последовательностями различной длины для объектов типа char и четырьмя typedef-имена string, u16string, u32string и wstring, которые обозначают специализации basic_string<char>, basic_string<char16_t>, basic_string<char32_t> и basic_string<wchar_t> соответственно.

К сожалению, когда дело доходит до прямой, таких специализаций не существует "из коробки" для basic_stream<char32_t>, но в локалях UTF8 должны быть конвертеры между char32_t и char.

0 голосов
/ 18 мая 2018

Либо используйте std::wstring, либо свой напиток std::basic_string<uint32_t>.

Это позволит вам использовать их операторы и функции для управления такими объектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...