Mehrere Funktionsargumente mit dem ODER-Operator verknüpfen?
-
Hallo,
ich möchte einem Funktionsargument gleichzeitig mehrere Werte, verknüpft durch den ODER Operator übergeben, wie es oft auch üblich so ist. So sollte das z.B. aussehen:
Schrift->SetMode (fett | kursiv | unterstrichen);Wie sieht so eine Funktionsdeklaration von SetMode aus? Wie extrahiere ich die einzelnen Parameter wieder?
-
const int fett= 0x0001; const int kursiv= 0x0002; const int unterstrichen = 0x0004; void SetMode(int param) { if(param & fett) { cout<<"Fett wurde gesetzt"; } } //oder mit enum enum style{fett,kursiv=2,unterstrichen=4}; void SetMode(style param) { ... }
-
Schrift::SetMode(unsigned modeFlags) { if (modeFlags & fett) enableFett(); //... }Imho geht das so.
Gruß
Don06
-
Nochmal vielen Dank.

-
Bei dem enum musst du aufpassen.
Da das erste Element 0 ist, also
ist Fett nie gesetzt.
Und bereits das dritte Element macht Probleme,
da 3 = 00000011bIch würde so deklarieren.
const int fett = (1<<0);
const int unterstrichen = (1<<1);
...
-
Don06 schrieb:
Schrift::SetMode(unsigned modeFlags) { if (modeFlags & fett) enableFett(); //... }Imho geht das so.
Gruß
Don06gibts nen besonderen grund wieso man unsigned name benutzt anstatt unsigend int name? ich dachte default int ist kein teil des c++ standards?
-
unsigned ist meines Wissens, wenn es allein steht ein Synonym für unsigned long(?)
-
short == signed short int; long == signed long int; unsigned == unsigned int; signed == signed int;EDIT:
Achja natürlich noch alle Kombinationen daraus:unsigned short == unsigned short int; long long == signed long long intBei Angabe eines "Modifaktors" unsigned oder signed wird int ergänzt. Bei Angabe eines "Modifikators" short oder long wird signed int ergänzt.
Gruß
Don06