【发布时间】:2012-10-10 02:11:16
【问题描述】:
我正在编写自己的字符串类(只是为了好玩),但我遇到了一些问题。我希望我的班级能够同时处理 ASCII 和 Unicode 字符串。如果您将const wchar_t* 分配给我的班级,则设置了Unicode 标志。如果您分配 const char*,则 Unicode 标志未设置。
此外,如果您尝试将 Unicode 字符附加到 ASCII 字符串,它将创建一个全新的 Unicode 字符串,或者将重新分配其缓冲区并将所有内容转换为 Unicode(不确定我会做什么) .
无论如何,关于我的问题:我想要类似于 std::string 的 c_str 函数的东西。显然我会有 2 个不同的函数,一个返回 const char* ASCII 字符串,一个返回 const wchar_t* Unicode 字符串。
假设我的字符串是 ASCII。如果我调用ToAsciiString() 函数,它只会返回一个指向字符串内部存储的指针,它不会也不应该被手动释放,因为字符串 dtor 会自动执行此操作。
但如果我想要 Unicode 格式的 ASCII 字符串,我可以调用 ToUnicodeString()。但这会产生一个问题:我需要分配一个新缓冲区来将我的 ASCII 字符串转换为。如果我这样做了,那么返回的指针将需要手动delete[]'ed,例如,这破坏了 std::string 的c_str 的简单性。
我不确定如何正确地做到这一点。
【问题讨论】:
-
Unicode 不是编码(UTF-8/UTF-16/UTF-32 是编码)。也许您希望字符串包含编码状态,并且任何新字符都必须包含它们的编码状态,并且它们被翻译为插入/附加等的一部分。