如何在c ++中简化多个if-else-if语句

qed*_*qed 0 c++ flow-control

假设我有四种情况的四种功能:

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的情况,这很简单,但在更复杂的情况下,这可能会变得非常繁琐.有没有办法简化这个?

bri*_*ing 8

#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)