使用二进制标志来表示状态,选项等

Aus*_*yde 1 c++ binary flags

如果我想表示使用二进制的"标志",这样我可以通过他们,并将它们存储到像一个对象状态或期权或类似的东西OPTION1 | OPTION2在那里OPTION1是0001 OPTION2是0010,这样,所获取传递为0011,较选项的组合.

我将如何在C++中执行此操作?我在想类似的东西

enum Option {
    Option_1 = 0x01,
    Option_2 = 0x02,
    Option_3 = 0x04,
    //...
}

void doSomething(Option options) {
    //...
}

int main() {
    doSomething(Option_1|Option_2);
}
Run Code Online (Sandbox Code Playgroud)

但理想情况下,doSomething知道如何解释给定的选项.

我是在正确的轨道上吗?有没有更好的办法?

更新

我不是必须Option为每种可能的组合定义一个吗?

Meh*_*ari 6

这是完成这些事情的常见方式.doSomething可以使用按位运算and符来查看是否选择了一个选项:

if (options & Option_1){ 
  // option 1 is selected
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以考虑使用位域:

struct Options {
    unsigned char Option_1 : 1;
    unsigned char Option_2 : 1;
};

Options o;
o.Option_1 = 1;
o.Option_2 = 0;
Run Code Online (Sandbox Code Playgroud)

  • 该死的,4年的专业C++开发,我从来没有听过或读过有关字段的内容! (2认同)