enums und bitweises OR
-
In C habe ich häufig enums und Bitverknüpfungen benutzt, also z.B.:
enum types{a=1,b=2,c=4}; void foo(types t) { if(t&a) { machWas(); } if(t&b) { machWasAnderes(); } if(t&c) { machWasGanzAnderes(); } } void bar(void) { foo(a|b); }Wie ich jetzt gemerkt habe, geht das in C++ nicht wirklich.
Was ist denn in C++ der Standardweg ein entsprechendes Verhalten zu erzeugen? Eine Unmenge von konstanten ints oder wildes gecaste kann es jawohl nicht sein...Gruß, Dirk
-
Du kannst einen enum implizit in einen int umwandeln, aber (zumindest unter C++) nicht wieder zurück - und die ganzen Bit-Operationen liefern auch ein int hinten heraus, also würde dein Beispiel vermutlich funktionieren, wenn du den Kopf von foo() änderst in "void foo(int t)".
-
Ja schon, aber gerade das möchte ich ja nicht..
-
Du musst Casten, es geht nicht anders... Enum zu Int geht implizit, Int zu Enum muss gecastet werden. Punkt

-
Kleiner Denkfehler deinerseits. Ein Enum ist keine Menge. Dazu sollte man Enums auch in C nicht benutzen.
-
Naja, dieses Konstrukt ist aber schon ein sehr beliebtes Mittel in C.
Aber egal, ich werde das anders regeln (über Mehrfachvererbung). Hintergrund ist ein Observer/Listener System, bei dem sich Listener für bestimmte Arten von Events anmelden können. Jetzt werde ich einfach für jede Event-Untermenge eine eigene virtuelle Listener-Klasse erstellen, das ist dann auch etwas schöner.
Vielen Dank und Gruß,
Dirk
-
Machs doch net zu kompliziert.
namespace Types { typedef int Type; const int a = 1; const int b = 2; const int c = 4; }