c++ - 如何处理与 C++ 中的 unicode 支持相关的代码重复

标签 c++ unicode

目前在 C++ 中处理 unicode 支持的最佳方法是什么?

假设我有一个像这样的简单函数:

std::wstring window::getTypeW(){
    return createType;
}

我可以像这样添加一个简单的非宽函数:

std::string window::getType(){
    std::string stype(createType.begin(),createType.end());
    return stype;
}

这不是什么大问题,但是当函数变得更复杂时,有很多变体选项。

示例:

int window::attachMenu(const std::string& str){
    if (veil.menu!=NULL){
        DestroyMenu(veil.menu);
        veil.menu=NULL;
    }

    ulti::element el;
    el.setStr(str);

    recurseElementForMenu(veil.menu,el,this);
    return 1;
}

选项:

  1. 我们可以复制代码,使宽变体和非宽变体同样快。

  2. 我们可以在 string 和 wstring 之间进行动态转换,从而消除重复代码。

  3. 在某些情况下,我们可以在适当的情况下使用模板(我知道如何进行这项工作的唯一方法是在使用时需要为每个函数显式键入)

  4. 我们可以使用...宏...让用户手动选择 unicode 支持。

总结:

这是为我的小 GUI 库设计的(它运行良好,减去了深入的 unicode 支持)所以我想做出最好的长期决定——支持数百个重复函数似乎是一场噩梦。但因为这是一个库,所以我确实希望尽可能少地处理时间……所以转换似乎是更大的浪费。

问题:

简单地支持 unicode 并完全消除非 unicode 支持在较新的库中是否可以接受?

有没有什么方法可以让我为 unicode 和非 unicode 创建一个函数?

还有没有其他方法我没有考虑过?

最佳答案

处理此问题的一个明显方法是尽可能简单。

在你的系统中,use UTF-8. All the time.当您与需要其他内容的系统交谈时,将您的 UTF-8 字符串转换为“其他内容”可能是的任何内容。当系统传回某种其他格式的字符串时,几乎立即将其转换为 UTF-8。

这样,您就不必在系统范围内重复任何代码。特定于平台的格式仅在系统外围使用。

这会影响性能吗?可能吧。但可能不会引人注意,除非你有一个极其糟糕的 UTF-8 到 UTF-16 转换器。

关于c++ - 如何处理与 C++ 中的 unicode 支持相关的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37957775/

相关文章:

c++ - 使用 GDB 挂起线程的命令

python - lxml 没有为 HTML 正确解析 unicode

c++ - 快速提问 : Why do VC++ compiled exe's stop working if I change their names?

c# - 一般 : Programming Code Guidelines & Styles

c++ - 在异常中不嵌入 std::string 的规则是否仍然适用于移动构造函数?

unicode - Perl 6 将如何处理新的组合表情符号长度?

php - 无法从数据库中获取要显示的正确字符

sql-server - 自由bcp : "Unicode data is odd byte size for column. Should be even byte size"

unicode - Unicode 中视觉相同的字符

c++ - OpenCV光 vector 计算