我有两个这样定义的枚举
enum foo {
foo_a = 0x1,
foo_b = 0x2,
foo_c = 0x4,
foo_d = 0x8,
foo_e = 0x10,
..etc..
}
和
enum bar {
bar_a = 0x1,
bar_b = 0x2,
bar_c = 0x4,
bar_d = 0x8,
bar_e = 0x10,
..etc..
}
现在,foo_[az] 和 bar_[az] 之间存在 1 对 1 的映射关系,我想快速查找一下。这样做的明显方法是做一些声明像
int table[][] = {
[foo_a] = bar_c,
[foo_b] = bar_a,
[foo_c] = bar_b,
..etc..
}
并使用result = table[(enum foo)temp]
. 但是由于这些枚举是按位声明的,所以 的大小table
呈指数增长。
有没有更简单的方法可以在编译时进行设置?
我考虑过的一件事是
int table[][] = {
[LOG(foo_a)] = bar_c,
[LOG(foo_b)] = bar_a,
[LOG(foo_c)] = bar_b,
..etc..
}
这将减少内存占用,但我不知道无论如何要在编译时计算 LOG。
还有其他建议吗?
我唯一的限制如下,无论如何我都不能修改枚举,因为更改它们会导致二进制不兼容。
编辑:首选编译时解决方案