mok*_*oka 9 c++ enums binary-operators switch-statement
我最近遇到了一些函数,你可以传递这样的多个枚举:
myFunction(One | Two);
Run Code Online (Sandbox Code Playgroud)
因为我认为这是一种非常优雅的方式,所以我尝试自己实现这样的方式:
void myFunction(int _a){
switch(_a){
case One:
cout<<"!!!!"<<endl;
break;
case Two:
cout<<"?????"<<endl;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试用One |调用该函数 二,我希望两个开关案例都被调用.我对二元运算符不是很好,所以我真的不知道该怎么做.任何想法都会很棒!
谢谢!
Ash*_*ish 14
为此你必须制作如下枚举:
enum STATE {
STATE_A = 1,
STATE_B = 2,
STATE_C = 4
};
Run Code Online (Sandbox Code Playgroud)
即枚举元素值应为2的幂,以选择有效的case或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);
}
Run Code Online (Sandbox Code Playgroud)
按位运算符仅在2的幂下表现良好:
0010
| 0100
------
0110 // both bits are set
0110
& 0100
------
0100 // nonzero, i.e. true: the flag is set
Run Code Online (Sandbox Code Playgroud)
如果你尝试用任意数字做同样的事情,你会得到意想不到的结果:
0101 // 5
| 1100 // 12
------
1101 // 13
Run Code Online (Sandbox Code Playgroud)
其中包含可能的(任意)数字作为设置标志:0001(1),0100(4),0101(5),1000(8),1001(9),1100(12),1101(13)
所以不是给出两个选项,而是给出了六个选项.