我之前见过的框架允许通过单个参数传递多个常量链,例如So,我相信:
foo(FLAG_A | FLAG_B | FLAG_C);
它们的行为类似于布尔值,因此该函数知道已指定了哪些标志。
现在我想实现类似的东西。
这个概念叫什么?
答案 0 :(得分:0)
它基于二进制或。通常,每个符号常量都只是一个不同的位,例如,如下所示:
enum {
FLAG_A = 1,
FLAG_B = 1<<1,
FLAG_C = 1<<2,
};
因此,您可以将它们与|
一起添加,用&
测试每个单独的对象,并用& ~
减去两个这样的标志集。
答案 1 :(得分:0)
在.Net中,这些是由enum
使用FlagsAttribute定义的:
[Flags()]
public enum Foo
{
Bit1 = 1,
Bit2 = 2,
Bit4 = 4,
Bit8 = 8,
etc.
}
// Or define using explicit binary syntax
[Flags()]
public enum Foo
{
Bit1 = 0b_0000_0001,
Bit2 = 0b_0000_0010,
Bit4 = 0b_0000_0100,
Bit8 = 0b_0000_,
etc.
}
要利用:
SomeFunction(Foo.Bit1 | Foo.Bit4 | etc);
我建议您的当前名称(标志)似乎是最合适的定义,至少在这种情况下如此。
答案 2 :(得分:0)
显然,“ flags and bitmasks”是正确的关键词,可以找到更多关于此的信息。以前没有“标志”。尽管如此,还是非常感谢您的解释性答案!