Я создаю API, который позволяет мне извлекать строки в разных кодировках, включая utf8, utf16, utf32 и wchar_t (это может быть utf32 или utf16 в соответствии с ОС).
-
Новый стандарт С++ ввел новые типы
char16_t
иchar32_t
, которые не имеют такой неопределенности sizeof и должны использоваться в будущем, поэтому я также хотел бы поддержать их, но вопрос в том, что будут ли они вмешиваться с обычными типамиuint16_t
,uint32_t
,wchar_t
, не допускающими перегрузки, потому что они могут ссылаться на один и тот же тип?class some_class { public: void set(std::string); // utf8 string void set(std::wstring); // wchar string utf16 or utf32 according // to sizeof(wchar_t) void set(std::basic_string<uint16_t>) // wchar independent utf16 string void set(std::basic_string<uint32_t>); // wchar independent utf32 string #ifdef HAVE_NEW_UNICODE_CHARRECTERS void set(std::basic_string<char16_t>) // new standard utf16 string void set(std::basic_string<char32_t>); // new standard utf32 string #endif };
Поэтому я могу просто написать:
foo.set(U"Some utf32 String"); foo.set(u"Some utf16 string");
-
Что такое typedef
std::basic_string<char16_t>
иstd::basic_string<char32_t>
, как есть сегодня:typedef basic_string<wchar_t> wstring.
Я не могу найти ссылку.
Изменить: согласно заголовкам gcc-4.4, которые ввели эти новые типы:
typedef basic_string<char16_t> u16string; typedef basic_string<char32_t> u32string;
Я просто хочу убедиться, что это фактическое стандартное требование, а не gcc-ism.