假设我有四种情况的四种功能:
void ac() {
//do something
}
void ad() {
//do something
}
void bc() {
//do something
}
void bd() {
//do something
}
void f(bool a, bool b, bool c, bool d) {
if(a and c) {
ac();
}
else if(a and d) {
ad();
}
else if(b and c) {
bc();
}
else if(b and d){
bd();
}
else {
throw 1;
}
}
Run Code Online (Sandbox Code Playgroud)
对于2比2的情况,这很简单,但在更复杂的情况下,这可能会变得非常繁琐.有没有办法简化这个?
#define A 0x1
#define B 0x2
#define C 0x4
#define D 0x8
void f(bool a, bool b, bool c, bool d) {
int mask = 0;
if( a ) mask |= A;
if( b ) mask |= B;
if( c ) mask |= C;
if( d ) mask |= D;
// Alternative is to use mask as a subscript in an array of function pointers.
switch( mask ) {
case A|C: ac(); break;
case A|D: ad(); break;
case B|C: bc(); break;
default: bd(); break;
}
}
Run Code Online (Sandbox Code Playgroud)