Domanda

Se volessi rappresentare stati o opzioni o qualcosa di simile usando i binari "flag" in modo da poterli passare e archiviarli in un oggetto come OPTION1 | OPTION2 dove OPTION1 è 0001 e OPTION2 è 0010, quindi ciò che viene superato è 0011, che rappresenta un mix di opzioni.

Come lo farei in C ++? Stavo pensando a qualcosa del genere

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

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

int main() {
    doSomething(Option_1|Option_2);
}

Ma idealmente, doSomething sa come interpretare l'opzione data.

Sono sulla buona strada? Esiste un modo migliore?

Aggiorna

E non dovrei definire un'opzione anche per ogni possibile combinazione?

È stato utile?

Soluzione

Questo è un modo comune di fare queste cose. doSomething può utilizzare l'operatore bitcode e per vedere se un'opzione è selezionata:

if (options & Option_1){ 
  // option 1 is selected
}

In alternativa, puoi prendere in considerazione l'utilizzo di campi di bit :

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

Options o;
o.Option_1 = 1;
o.Option_2 = 0;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top