Logik Problem: Vermeidung von if Abfragen



  • Sebastian Pizer schrieb:

    Aus keinem besonderen Grund. Es war eher eine Laune. Es gibt mit enum s einen Vorteil aber auch einen Nachteil:
    + mehr Typsicherheit
    - expliziter Cast nötig wenn man "Flags" zusammensetzt

    Du könntest zunächst bloß deine selbstgebastelte unsigned const -Aufzählung in ein enum ändern und den Rest einfach so lassen.



  • Logigproblem schrieb:

    Der Code von l'abra d'or funtkioniert einwandfrei! DANKE 😃

    Der Code von Sebastian Pizer ist aber viel kürzer.

    Will auch noch meinen Senf dazugeben:
    Wenn die Farben definiert sind als

    enum Color { blue = 1, green = 2, black = 4, red = 8, white = 16 };
    

    dann kannst du eine Bedingung folgendermaßen erstellen:

    Color condition = Color(black | white | blue);
    

    Die Überprüfung geht dann so:

    if(condition | object == condition)    // Wenn in condition keine Bits gesetzt sind, die nicht auch in condition gesetzt sind
        Farbe erfüllt die Bedingung
    

    Damit ist das Portabilitätsproblem von Sebastian Pizer auch erledigt.



  • @Michael E.: Perfect! 👍 🙂

    Naja, strenggenommen benutzt Du die Bitweise-Oder-Verknüpfung immer noch auf int und nicht unsigned int . Aber die Zahlen, mit denen da hantiert wird, sind ja eh nicht negativ und die Bitmuster für Zahlen 0...32767 müssten dann alle gleich sein, egal ob die Maschine Zweierkomplement, Einerkomplement oder Sign-Magnitude als binäre Repräsentierung nutzt. Ich weiß jetzt gerade nicht, ob C++ noch etwas anderes zulässt. Wenn ja, könnte es sein, dass es immer noch nicht 100% portabel (vermute aber mal, dass es das ist).

    Gruß,
    SP


Anmelden zum Antworten