Mehrere Funktionsargumente mit dem ODER-Operator verknüpfen?



  • Hallo,

    ich möchte einem Funktionsargument gleichzeitig mehrere Werte, verknüpft durch den ODER Operator übergeben, wie es oft auch üblich so ist. So sollte das z.B. aussehen:

    Schrift->SetMode (fett | kursiv | unterstrichen);
    

    Wie sieht so eine Funktionsdeklaration von SetMode aus? Wie extrahiere ich die einzelnen Parameter wieder?



  • const int fett= 0x0001;          
    const int kursiv= 0x0002;
    const int unterstrichen = 0x0004;
    
    void SetMode(int param)
    {
    if(param & fett)
     {
     cout<<"Fett wurde gesetzt";
     }
    
    }
    
    //oder mit enum
    
    enum style{fett,kursiv=2,unterstrichen=4};
    void SetMode(style param)
    {
    ...
    
    }
    


  • Schrift::SetMode(unsigned modeFlags)
    {
        if (modeFlags & fett)
            enableFett();
        //...
    }
    

    Imho geht das so.

    Gruß
    Don06



  • Nochmal vielen Dank. 🙂



  • Bei dem enum musst du aufpassen.
    Da das erste Element 0 ist, also
    ist Fett nie gesetzt.
    Und bereits das dritte Element macht Probleme,
    da 3 = 00000011b

    Ich würde so deklarieren.
    const int fett = (1<<0);
    const int unterstrichen = (1<<1);
    ...



  • Don06 schrieb:

    Schrift::SetMode(unsigned modeFlags)
    {
        if (modeFlags & fett)
            enableFett();
        //...
    }
    

    Imho geht das so.

    Gruß
    Don06

    gibts nen besonderen grund wieso man unsigned name benutzt anstatt unsigend int name? ich dachte default int ist kein teil des c++ standards?



  • unsigned ist meines Wissens, wenn es allein steht ein Synonym für unsigned long(?)



  • short    == signed short int;
    long     == signed long int;
    unsigned == unsigned int;
    signed   == signed int;
    

    EDIT:
    Achja natürlich noch alle Kombinationen daraus:

    unsigned short == unsigned short int;
    long long      == signed long long int
    

    Bei Angabe eines "Modifaktors" unsigned oder signed wird int ergänzt. Bei Angabe eines "Modifikators" short oder long wird signed int ergänzt.

    Gruß
    Don06


Anmelden zum Antworten