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 ); }