Enum - Übergabe



  • Eine Frage zur Übergabe von Enums. Ich will mit einem Enum eine Methode einer Klasse aufrufen. Wie gehe ich am besten vor? Wo muss ich das Enum definieren, damit es funktiert?

    Eine Klasse:

    enum Type {Rot =1, Blau=2};
    class A
    {
    }
    
    double A::doSomething(Type name)
    

    Der Aufruf an anderer Stelle.

    A objekt
    var=objekt.doSomething(Rot);
    

    Danke.



  • So ist es schöner :p

    enum Type {Rot =1, Blau=2};
    class A
    {
    }
    
    double A::doSomething(Type name)
    

    Der Aufruf an anderer Stelle.

    A objekt
    var=objekt.doSomething(Rot);
    


  • Noch schöner:

    enum class Color {Rot, Blau};
    class A
    {
    }
    
    double A::doSomething(Color color);
    

    Der Aufruf an anderer Stelle:

    A objekt;
    var = objekt.doSomething(Color::Rot);
    

    Denglisch FTW!



  • Farben sind sehr häufige Namen und werden in den Scope "exportiert". Ich rate dir dazu, enum class zu verwenden oder sie vielleicht sogar direkt in der Klasse anzulegen.



  • Wie wäre es denn damit, erstmal Fragen in Deinen alten Threads zu beantworten? Meiner Meinung nach gebietet das die Höflichkeit.



  • Die Farben waren nur ein Beispiel. Tatsächlich handelt es sich um andere Typen. Wie wäre das, wenn man sie direkt in der Klasse anlegt?



  • Das Ding ist: Anders als z.B. in Java sind die Konstanten eiens enums von überall quasi einfach so erreichbar und sichtbar (natürlich nur bei entsprechenden Includes und Namespaces).

    enum Farbe
    {
        Rot,
        Gruen,
        Blau
    };
    
    void foo()
    {
        int Rot = 0;
        Rot = Rot; // Welches Rot sit hier jetzt gemeint?
    }
    int main() {
        foo();
        return 0;
    }
    

    Du hast dann die Möglichkeit das enum in eine Klasse (oder struct) einzubetten:

    struct Farbe
    {
    	enum EFarbe
    	{
    		Rot,
    		Gruen,
    		Blau
    	};
    };
    
    void foo()
    {
        int Rot = 0;
        Rot = Farbe::Rot;
    }
    int main() {
    	foo();
    	return 0;
    }
    

    So musst du von aussen über den Klassennamen auf die Enumkonstanten zugreifen.



  • Ich würde allerdings eher Namensräume statt Klassen nehmen. Du willst die Klasse eh nie instanziieren, und bei Namensräumen hast du den Vorteil, dass du lokal using namespace schreiben kannst, um Code übersichtlicher zu machen.


Log in to reply