enum in zwei Klassen gleich benutzbar, wie?
-
dragon90# schrieb:
Sämtliche Alternativlösungen (zu meiner Define-Lösung) sind entweder unvollständig, misachten Design-Prinzipien oder fressen Laufzeit für eine rein stilistische Angelegenheit.
Gesteht es ein für so etwas ist ein Define noch die beste Lösung. Das Problem ist ja kein richtiges Problem sondern nur eine rein stilistische Angelegenheit.Wieso? Das mit dem typedef ist doch besser?!
mfg.
-
Jo stimmt, das mit dem typedef ist der gute Weg. Schade das es nicht mit dem using geklappt hat, denn jetzt muss man zwar nicht mehr A::EType schreiben aber dafür A::First
Übrehaupt ist doch der Sinn eines enum das man einen scope hat.
enum Fooo { xxxxx }; // einmal Fooo::xxxxx enum Baar { xxxxx }; // einmal Baar::xxxxxsonst kann man doch gleich statische Konstanten benutzen.
Soll heisen: Es ist ein feature, kein bug
-
joomoo schrieb:
dragon90# schrieb:
Sämtliche Alternativlösungen (zu meiner Define-Lösung) sind entweder unvollständig, misachten Design-Prinzipien oder fressen Laufzeit für eine rein stilistische Angelegenheit.
Gesteht es ein für so etwas ist ein Define noch die beste Lösung. Das Problem ist ja kein richtiges Problem sondern nur eine rein stilistische Angelegenheit.Wieso? Das mit dem typedef ist doch besser?!
mfg.
Nicht wirklich:
//Deklaration EType myEnum = A::First; if( myEnum == A::First ) myEnum = A::Second; //...Man spart den Scope nur bei der Deklaration ein, aber gerade da ist es ja egal, das muss man ja nur einmal pro Variable machen.
-
Jaha, das bekommt deine Variante aber auch nicht hin. Warum das typedef besser als der Präprozessor ist hab ich schon einmal geschrieben.
Und jetzt ist mal bitte Ruhe hier... :p
-
Stimmt, hatte mein Define anders in Erinnerung.
Man könnte aber folgendes machen:
struct A { enum EType { First }; }; struct B { typedef A::EType EType; const int First = A::First; //const int Second = A::Second usw. B() { A::EType x = A::First; // klappt EType y = First; // EType undeclared } };
-
Dann kannste direkt
struct B { enum EType { First = A::EType::First, Second = A::EType::Second } // ... };schreiben. Ich bin mir jetzt aber nicht ganz sicher, ob enum-Typen automatisch untereinander umgewandelt werden, müsste aber so sein...
-
Du schreibst zwei bis drei Zeilen mehr um drei Zeichen zu sparen

Wozu?
-
Warum zum Henker liest du dir nicht den Thread durch, bevor du postest?!

-
Ich _habe_ ihn gelesen, aber der Sinn ist mir dennoch schleierhaft.
Kein Grund staubig zu werden.
-
.filmor schrieb:
Probier mal den Code aus, den dragon da gepostet hat ...
BTW, es ist schon ziemlicher Quatsch, ein 3 Zeichen langes A:: durch zwei böse Codezeilen zu ersetzen ... 
/edit:
Vielleicht ja so:struct B { typedef A::EType EType; // ...Immerhin kommts ohne Präprozessor aus und ist nicht so fehleranfällig (man denke nur an ein leicht vergessenes #undef ..)
Das ist der letzte Post auf der ersten Seite. Nun lies dir mal genau die zweite Zeile durch und vergleich sie mit deinem Post.

-
Eben da stehts doch schon! Aber gut, ich halt mich raus..