【发布时间】:2010-10-26 17:28:32
【问题描述】:
我正在构建一个 API,它允许我获取各种编码的字符串,包括 utf8、utf16、utf32 和 wchar_t(根据操作系统可能是 utf32 或 utf16)。
-
新的 C++ 标准引入了新类型
char16_t和char32_t,它们没有这种大小的歧义,应该在未来使用,所以我也想支持它们,但问题是,会它们会干扰正常的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"); -
今天
std::basic_string<char16_t>和std::basic_string<char32_t>的typedef是什么:typedef basic_string<wchar_t> wstring.我找不到任何参考资料。
编辑:根据 gcc-4.4 的标题,引入了这些新类型:
typedef basic_string<char16_t> u16string; typedef basic_string<char32_t> u32string;我只是想确保这是实际的标准要求,而不是 gcc-ism。
【问题讨论】:
-
你似乎无意中恢复了我琐碎的 s/interfer/interfere/ 拼写更正。
-
谢谢,将您的修复合并回来。
标签: c++ unicode c++11 char16-t char32-t