【发布时间】:2011-09-26 13:24:22
【问题描述】:
我正在使用 bitflag 来启用/禁用我的代码中的某些功能。我有以下枚举。
typedef enum function {
function1 = 1 << 0,
function2 = 1 << 1,
function3 = 1 << 2,
function4 = 1 << 3
};
我知道我需要使用以下代码来检查已启用的标志。
if((flags & function1) == function1)
{
// do some action
}
在我的枚举中,标志的数量很大,要检查每个标志,我需要进行那么多“if”条件检查。有什么方法可以最小化所需的 if 语句的数量?我是目标 C 的新手,并希望在目标 C 中实现它。提前致谢。
【问题讨论】:
-
“大”是什么意思? 16? 256? 4096?对于 256 或更少,您可以使用带有函数指针的表,但我会使用普通索引 (0, 1, 2, 3, ...) 而不是位值。
-
具体到 32 左右。我需要检查每个标志并采取适当的措施。我有一个检查每个标志的函数。我从无法控制的服务器接收位值。所以我必须移动位值。
-
然后做一个这样的for循环: for (i = 0, bit = 1; i
-
是的,这很棒。它应该工作。我认为为每个标志调用函数会增加一些性能开销,但很高兴知道这种替代方法。你应该在答案中发布这个。我不能接受评论作为答案。 :) 无论如何谢谢。
标签: objective-c enums