可链接的布尔标志-它们叫什么?

时间:2019-10-23 08:16:09

标签: flags

我之前见过的框架允许通过单个参数传递多个常量链,例如So,我相信:

foo(FLAG_A | FLAG_B | FLAG_C);

它们的行为类似于布尔值,因此该函数知道已指定了哪些标志。

现在我想实现类似的东西。

这个概念叫什么?

3 个答案:

答案 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”是正确的关键词,可以找到更多关于此的信息。以前没有“标志”。尽管如此,还是非常感谢您的解释性答案!