Kurzschreibweise If mit mehren Bedingungen



  • Hallo,

    ich wollte mal fragen ob es auch eine Kurzschreibweise für

    If(Check == 1 || Check == 2 || Check == 0)
    {Anweisung}
    

    gibt. Ich habe dacht an sowas

    If(Check == 1 || 2 || 0)
    {Anweisung}
    

    aber das funktioniert nicht. Da gibt es doch bestimmt was oder???



  • Nein gibt es nicht, zu mindestens nicht für if



  • Ah ok, schade. Aber danke für die schnelle Antwort.



  • Für aufeinanderfolgende Zahlen [MinX, MaxX] geht natürlich kürzer

    if (x >= MinX && x <= MaxX)
    

    Ansonsten (gerade bei mehreren unterschiedlichen Zahlenwerten) geht es auch mit der Hilfsfunktion

    template<typename T, typename C>
    bool IsIn(const T& t, const C& c)
    {
        return std::find(begin(c), end(c), t) != end(c);
    }
    
    int check = 2;
    auto v = {1, 2, 0};
    	   
    if (IsIn(check, v))
        cout << "found" << endl;	   
    

    s.a. Ideone-Code



  • Seit C++17 kannst du dir auch eine Hilfsfunktion mit fold expressions schreiben.



  • @Th69 sagte in Kurzschreibweise If mit mehren Bedingungen:

    Ansonsten (gerade bei mehreren unterschiedlichen Zahlenwerten) geht es auch mit der Hilfsfunktion

    Alternativ böte sich auch ein std::(unordered_)set an, besonders wenn es viele gültige Werte gibt.

    int check = 2;
    std::set<int> valid_numbers = {2, 43, 57};
    if (valid_numbers.count(check)) std::cout << "found\n";
    


  • Oder man erschlägt das mit nem variadic template. Find ich aber nicht schön und auch nicht intuitiv.

    #include <utility>
    
    template<typename T>
    static bool is_one_of( const T& ref, const T& compare )
    {
       return ref == compare;
    }
    
    template<typename T, typename... Args>
    static bool is_one_of( const T& ref, const T& compare, Args&&... args )
    {
       if( ref == compare ) return true;
       else			return is_one_of( ref, std::forward<Args&&>( args )... );
    }
    
    int main()
    {
       bool result = is_one_of( 2, 0, 1, 2 );
    }
    

Anmelden zum Antworten