Switch - Anweisung und Aufzählungen einbinden.



  • @SeppJ sagte in Switch - Anweisung und Aufzählungen einbinden.:

    Braucht man auch, wie wob schon sagte, praktisch nie außerhalb künstlich konstruierter Übungsaufgaben.

    Gut, also das sehe ich etwas anders. Ich brauche das häufiger. Und was daran so schlimm ist, weiß ich jetzt auch nicht...

    Beispiel 1: Messageempfang über Socket:

    switch ( msg_type )
    {
        case MSG_TYPE_START_PROCESS : ... break;
        case MSG_TYPE_END_PROCESS: .... break;
        default : throw ....
    }
    

    Beispiel 2: Object-Factories

    std::shared_ptr<BasisklassenTyp> createObjectByType( int objecttype )
    {
       switch ( objecttype )
       {
           case OBJECT_A : return std::make_shared<Spezialisierung_A> (... );
           default : return nullptr;
       }
    }
    

    Wenn ihr für einen der Anwendungsfälle eine bessere Lösung habt, immer raus damit 😉
    (ist ernst gemeint)



  • @SeppJ

    Das mit den Punkten "..." hab ich durch Recherche raus gefunden, dass es funktioniert. Erspart mir die ganzen weiteren case Zeilen. Es ist einfach ein Intervall von X bis Y.
    Ist für mich soweit auch nicht weiter wichtig. Mich interessiert ehrlich gesagt nur wie ich die Elemente aus meinem enum AKTION reinbekomme.



  • @It0101 inwiefern hilft mir das weiter?...


  • Mod

    @It0101 : Findest du das denn schön, programminterne Kommunikation mittels int-Codes? Bei dem Messageinterface wirst du da sicherlich von der C-Schnittstelle beglückt und musst es so machen, aber das ist dann ja auch eine C-Schnittstelle, die man in C++ so eigentlich nicht machen würde.

    Bei deinem zweiten Beispiel sehe ich nicht so ganz den Sinn, wieso du nicht direkt make_shared auf der korrekten Spezialisierung machst. Da kann ja niemand jemals eigene Spezialisierungen einführen, weil deine Liste fest und unveränderlich im Code verankert ist. Auch schlimm: Du selber musst stets aufpassen, dass du niemals vergisst, deine Codes an lauter verschiedenen Stellen im Programm aktuell und konsistent zu halten. Wenn schon solche Codes, wieso dann keine dynamische Liste statt hartcodierter Codes?



  • @eDEN sagte in Switch - Anweisung und Aufzählungen einbinden.:

    Das mit den Punkten "..." hab ich durch Recherche raus gefunden

    g++ switch.cpp -o switch -Wall -pedantic -std=c++17

    switch.cpp:9:3: warning: range expressions in switch statements are non-standard [-Wpedantic]
    case 1 ... 3:
    ^~~~



  • @eDEN sagte in Switch - Anweisung und Aufzählungen einbinden.:

    @It0101 inwiefern hilft mir das weiter?...

    Das es trotz allen Übungsaufgaben immer noch einen Grund für switch geben kann 😉

    Ich benutze einen switch case zB hier und finde gar gar nicht 'falsch'? Oder doch?

    Char Console::mixedChar( const Char& chr_a,
                             const Char& chr_b,
                             const int char_mix_mode ) const
    {
        Char chr_out  = chr_a;
        switch ( char_mix_mode )
        {
        case NONE:
            break;
        case BACKGROUND:
            chr_out.bg_color = chr_b.bg_color;
            break;
        case FOREGROUND:
            chr_out.bg_color = chr_b.fg_color;
            break;
        case FOREGROUND_BACKGROUND:
            chr_out.fg_color = chr_b.bg_color;
            break;
        case FOREGROUND_FOREGROUND:
            chr_out.fg_color = chr_b.fg_color;
            break;
        default:
            std::cerr << "Console::mixedChar(): char mix mode warning\n";
            std::cerr << "char_mix_mode: " << char_mix_mode;
            ready();
        }
        return chr_out;
    }
    


  • Ich habe das Switch-Thema mal ausgelagert, damit hier ungestört die Probleme des Threaderstellers diskutiert werden können: Vermeidung von Switches

    @lemon03 :
    hau dein Beispiel ruhig mit in den neuen Thread rein. 😉



  • @manni66

    hmm... bei mir geht es problemfrei...
    Sollte auch bei meinem Übungsleiter der Fall sein, da wir das selbe Programm und die selbe Library nutzen. Spielt auch keine Rolle kann es andernfalls ja ändern :).

    Mich interessiert halt echt nur noch die Tatsache, wie ich es hinkriege meine Elemente aus dem enum als Antwort auszugeben.



  • @eDEN sagte in Switch - Anweisung und Aufzählungen einbinden.:

    @manni66

    hmm... bei mir geht es problemfrei...

    hast du denn als Compiler-Option noch "-Wpedantic" beim Buildprozess angegeben?

    Ohne Pedantic akzeptiert er das natürlich. Es ist halt tatsächlich weder im Standard so zulässig noch ist es üblich. Wenn man Ranges abtestet dann üblicherweise mit "if".



  • @eDEN sagte in Switch - Anweisung und Aufzählungen einbinden.:

    Mich interessiert halt echt nur noch die Tatsache, wie ich es hinkriege meine Elemente aus dem enum als Antwort auszugeben.

    Warum Ausgabe?

    @eDEN sagte in Switch - Anweisung und Aufzählungen einbinden.:

    Ordnen Sie jeder Temperatur eine der Aktivitäten aus AKTION zu

    Ist AKTION aktion; vorgegeben? Dann würde ich annehmen, dass aktion = Heizen; gemeint ist.



  • @manni66

    @manni66 sagte in Switch - Anweisung und Aufzählungen einbinden.:

    Warum Ausgabe?

    Die Aufgabe verlangt es so. Es reicht kein einfacher cout << "Heizen" << endl;
    Oder hab ich das falsch verstanden ?

    @manni66 sagte in Switch - Anweisung und Aufzählungen einbinden.:

    Ist AKTION aktion; vorgegeben? Dann würde ich annehmen, dass aktion = Heizen; gemeint ist.

    Nein. Ich habe es mir ausgedacht. Vorgegeben ist nur AKTION und die Elemente die da drinne sind.
    Wenn ich aktion = Heizen nehme, dann wird die Ausgabe 0, da es das 0. Element ist..


Anmelden zum Antworten