Methodenaufruf mit nur bestimmten Argumenten erlauben



  • otze schrieb:

    benutz doch ein enum 🙂

    Aja die Enummerations. Danke für den Tipp. Dennoch, ich habe echt mühe bei der Anwendung. Hoffe ich mache es so richtig...

    //headerfile 'id.h'
     enum ENUM_FARBE { ROT, BLAU, GRUEN};
    
    // deklaration
     void Hello::foo(int iFarbe);
    
    // anwendung
     #include "id.h"
     Hello h;
     h.foo(ENUM_FARBE::BLAU); // 'BLAU' kennt er nicht
     h.foo(ENUM_FARBE(BLAU)); // ok
    

    das Problem ist aber immer noch, dass man bei foo immer noch einen beliebigen int-Wert, anstatt ENUM_FARBE übergeben kann.



  • ah ich denke ich habs:

    void foo(enum ENUM_FARBE value);
    
    void Hello:foo(enum ENUM_FARBE value){
     int i = value;
    }
    

    richtig 🕶 😕 😕



  • als argument solltest du auch kein int annehmen sondern das enum
    schöner wäre sowas

    struct Foo
    {
        enum FARBE { ROT, BLAU, GRUEN };
    
        void Bar(FARBE e)
        { }
    };
    
    int main()
    {
        Foo f;
        f.Bar(Foo::BLAU);
    }
    

    [edit]
    zu langsam 😃



  • das sowas nicht geht finde ich schade:

    enum FARBE { ROT, BLAU, GRUEN };
    void Foo( FARBE f );
    ...
    Foo( FARBE.ROT ); // <--
    


  • Hallo und danke für das Codeschnipsel. Habe nun versucht, dieses auf mein Projekt anzuwenden, doch es geht leider nicht:

    headerfile mit dem enum:

    #ifndef _ENUMH_
    #define _ENUMH_
    
      enum FARBE {ROT, BLAU};
    
    #endif;
    

    Klasse mit Methodendeklaration

    #include "enums.h"  // damit foo 'FARBE' kennt
     void foo(FARBE e);
    

    Anwendung:

    #include "enums.h"
     void Usage::dou(){
      MyClass mc;
      mc.foo( FARBE::ROT);  // FEHLER: 'ROT' ist kein Element von FARBE
     }
    

    Was soll das nun wieder?



  • Sprech es einfach mit ROT an und lass das FARBE:: weg.



  • hehejo schrieb:

    Sprech es einfach mit ROT an und lass das FARBE:: weg.

    You're my new God. Thanks man.



  • miller_m schrieb:

    schöner wäre sowas

    struct Foo
    {
        enum FARBE { ROT, BLAU, GRUEN };
    
        void Bar(FARBE e)
        { }
    };
    
    int main()
    {
        Foo f;
        f.Bar(Foo::BLAU);
    }
    

    Oder gleich noch den operator () überladen

    struct foo {
      enum FARBE {ROT, BLAU, GRUEN};
      void operator()  (FARBE e)  {
        /* .. */
      }
    };
    
    int main() {
      foo f;
      f(foo::BLAU);
      return 0;
    }
    


  • Würd ich nicht machen wenns nicht unbedingt sein muss.

    MfG SideWinder



  • SideWinder schrieb:

    Würd ich nicht machen wenns nicht unbedingt sein muss.

    Warum denn nicht?



  • Weil der op() nicht dazu da ist die jeweils meistgenutzte Methode zu ersetzen.

    MfG SideWinder


Anmelden zum Antworten