我现在有一些看起来像这样的代码:
#define ______ 0x0000
static const uint16_t plane0[256] = {
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
0x0058, 0x0059, 0x005A, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, 0x039C, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
...
};
#undef ______
uint16_t caseup(uint16_t wc)
{
return (plane0[wc] == 0x0000) ? wc : plane0[wc];
}
我真的很想caseup
用一个简单的return plane0[wc]
. 从总体上看,额外的比较和分支可能不会很昂贵,但如果我们去掉它,代码肯定会更有效。
但我不想重写表格。甚至不使用工具来重写它——我不希望我们的案例映射表被很多垃圾的十六进制值弄得乱七八糟。我希望该表保持大部分原始宏观化,仅在实际需要非身份案例映射的地方使用十六进制值。
在 C++11 中最干净的方法是什么?