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++ - 在结构具有该成员时访问模板函数中的结构成员

c++ - 被释放的指针未分配给指针赋值

C++ 模板 - 可变参数模板和通过 const 引用传递

unicode - Unicode 字符 MATHEMATICAL DOUBLE-STRUCK CAPITAL C 发生了什么?

java - 用空间来解释这个奇怪的现象

c++ - 冒泡排序 vector

html - FontAwesome unicode 似乎不起作用?

ios - 将标点符号从半角转换为全角

unicode - 是否可以使用表情符号创建 zalgo 文本?

c++ - 如果机器每个字节有 > 8 位,那么 int8_t 是什么?