Alternative zu verschachteltem switch
-
Ich habe eine Methode, die zwei Parameter nimmt und anhand dieser ein Objekt zurueckliefert
das sieht derzeit in etwa so aus:
MyObject* buildObject( MyEnum value, eStatus status ) { // in value steht der Wert, der nachher "erscheinen" muss und status, wie dieser dagestellt werden muss switch( value ) { case v1: switch( status ) { case s1: return new MyObject( "Wert", 0 ); case s2: return new MyObject( 0, "Wert" ); case s3: return new MyObject( "Wert", "Wert" ); } break; case v2: // siehe v1, nur anderer "Wert" break; // usw default: return NULL; } }das ist natuerlich alles andere als praktisch, wartbar und schoen, aber wie macht man es "besser"?
-
Naja einfach wäre ein nicht verschachtelter switch.
MyObject* buildObject( MyEnum value, eStatus status ) { // in value steht der Wert, der nachher "erscheinen" muss und status, wie dieser dagestellt werden muss std::string wert; switch (value) { case v1: wert = "Wert"; break; case v2: wert = "andererWert"; break; } switch( status ) { case s1: return new MyObject( wert, 0 ); case s2: return new MyObject( 0, wert ); case s3: return new MyObject( wert, wert ); } }
-
Oder eine std::map. Initialisiert mit den entsprechenden Werten und in der Funktion dann eine simple Abfrage eben jener. Gerade wenn die Werte bekannt sind läßt sich das leicht realisieren.
-
Wobei bei einfachen Enum-Variablen, die linear von Null an durchnummeriert sind, auch ein Array (oder ein Container wie
std::tr1::array) reicht - und sogar noch schneller als einestd::mapist.