c++在一个函数参数中使用按位或 "|"的多个枚举

标签 c++ enums switch-statement binary-operators

我最近遇到了一些可以像这样传递多个枚举的函数:

myFunction(One | Two);

因为我认为这是一种非常优雅的方式,所以我尝试自己实现类似的东西:

void myFunction(int _a){
    switch(_a){
        case One:
            cout<<"!!!!"<<endl;
            break;
        case Two:
            cout<<"?????"<<endl;
            break;
    }
}

现在如果我尝试用 One | 调用函数第二,我希望两个 switch case 都被调用。我不太擅长二元运算符,所以我真的不知道该怎么做。任何想法都会很棒!

谢谢!

最佳答案

为此你必须像这样制作枚举:

enum STATE {
  STATE_A = 1,
  STATE_B = 2,
  STATE_C = 4
};

即枚举元素值应为 2 的幂,以选择有效的大小写或 if 语句。

所以当你喜欢的时候:

void foo( int state) {

  if ( state & STATE_A ) {
    //  do something 
  }

  if ( state & STATE_B ) {
    //  do something 
  }

  if ( state & STATE_C ) {
    //  do something 
  }   
}

int main() {
  foo( STATE_A | STATE_B | STATE_C);
}

关于c++在一个函数参数中使用按位或 "|"的多个枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1874051/

相关文章:

c# - 这个开关盒怎么有无法访问的代码?

c++ - int 和 double 变量的初始化

c++ - SFINAE-将任何容器转换为 C 风格的数组 View

java - Java中的 "enum"有什么用?

java - 将类枚举传递给克隆是否克隆安全?

node.js - 使用 switch case 更新集合中的多个文档

c++ - 现代如何使用汇编(例如,使用 C/C++)?

c++ - 没有指针的继承

iphone - objective c 中创建对象和设置其属性的最佳实践是什么

reactjs - 如何在 JSX 内使用 switch case : ReactJS