Art*_*yom 25 c++ unicode c++11 char16-t char32-t
我正在建立一个允许我以各种编码方式获取字符串的API,包括utf8,utf16,utf32和wchar_t(根据操作系统可能是utf32或utf16).
新的C++标准已推出了新的类型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
};
Run Code Online (Sandbox Code Playgroud)
所以我可以写:
foo.set(U"Some utf32 String");
foo.set(u"Some utf16 string");
Run Code Online (Sandbox Code Playgroud)什么是typedef的std::basic_string<char16_t>和std::basic_string<char32_t>今天有:
typedef basic_string<wchar_t> wstring.
Run Code Online (Sandbox Code Playgroud)
我找不到任何参考.
编辑:根据gcc-4.4的标题,介绍了这些新类型:
typedef basic_string<char16_t> u16string;
typedef basic_string<char32_t> u32string;
Run Code Online (Sandbox Code Playgroud)
我只是想确保这是实际的标准要求而不是gcc-ism.
Ale*_*ter 29
1)char16_t并且char32_t将是不同的新类型,因此可以对它们进行重载.
引自ISO/IEC JTC1 SC22 WG21 N2018:
定义
char16_t为不同新类型的typedef,其名称_Char16_t具有相同的大小和表示形式uint_least16_t.同样,将define定义char32_t为不同新类型的typedef,其名称_Char32_t具有相同的大小和表示形式uint_least32_t.
进一步解释(来自devx.com文章" 为Unicode革命做好准备 "):
您可能想知道为什么 在typedef 和 可用时首先需要
_Char16_t和_Char32_t类型和关键字.新类型解决的主要问题是重载.它现在可以重载需要的功能和 参数,并建立专业化,例如 是从不同的 .uint_least16_tuint_least32_t_Char16_t_Char32_tstd::basic_string<_Char16_t>std::basic_string <wchar_t>
2)u16string并且u32string确实是C++ 0x的一部分,而不仅仅是GCC的主题,因为它们在各种标准草案文件中都有提及.它们将包含在新<string>标题中.从同一篇文章引用:
该标准库也将提供
_Char16_t与_Char32_t该类型定义类型定义,类似于wstring,wcout等等,以下标准类:
filebuf, streambuf, streampos, streamoff, ios, istream, ostream, fstream, ifstream, ofstream, stringstream, istringstream, ostringstream,string
| 归档时间: |
|
| 查看次数: |
5743 次 |
| 最近记录: |