enum iterieren
-
Gibt es eine möglichkeit um durch einen enum zu iterieren?
-
Nein.
-
Also momentan sieht das so aus dass ich den enum in ein array packe und dann das Array iteriere:
enum Tier { HUND = 1, KATZE = 2, MAUS = 3, ELEFANT = 4, }; Tier tier[] = { HUND, KATZE, MAUS, ELEFANT, }; for(int i=0; i<sizeof(tier)/sizeof(Tier); i++) { Füttere(tier[i]); }
geht das auch einfacher?
-
Nein! Du musst die Werte alle in irgendeiner Form in Denem Code "realisieren" ob in einer if Kaskade oder einem switch oder einem array...
-
Sprich alles richtig gemacht
-
Richtig? Kommt darauf an für was Du es brauchst.
Bei mir leben enums nie alleine sondern meistens nur als Zustand/Optionen für bestimmte Daten und Funktionen.BTW auch andere Programmierer haben schönen Code:
http://www.codeproject.com/KB/cpp/EnumeratorListsAndArrays.aspx
-
Bei mir leben enums nie alleine sondern meistens nur als Zustand/Optionen für bestimmte Daten und Funktionen
Klar. Für was soll man einen enum definieren wenn man ihn nicht braucht. Oder wie meinste das.
-
Weil Daten und Zustände immer in einem Kontext stehen, sehe ich nicht die Notwendigkeit einem enum zu enumerieren.
-
Ich versuche mal zu erklären was ich vor habe
Ich habe 2 Listen.
Liste 1 enthält eigentlich nur Werte also mein enum.
Liste 2 enthält verschiedene Objekte. Alle aber abgeleitet von einer Klasse.Für jeden Wert aus der Liste1 rufe ich eine Funktion aus der Liste2 auf und übergebe den Wert.
for(int i=0; i<sizeof(tier)/sizeof(Tier); i++) { for( iter=zoo_liste.begin(); iter!= zoo_liste.end(); ++iter) iter->Fuettere(tier[i]); }
void ZooBerlin::Fuettere(Tier tier) { switch(tier) { case HUND: Hundefutter(); break; case KATZE: Katzenfutter(); break; } } void ZooFrankfurt::Fuettere(Tier tier) { switch(tier) { case HUND: Hundefutter; break; case ELEFANT: Elefantenfutter(); break; } }
Die "Fütterung" muss genau in der Reihenfolge stattfinden wie im Enum angegeben.
Also erst muss in allen Zoos die Hunde gefüttert werden. Vorausgesetzt man hat nen Hund. usw.Dachte das bisher so eigentlich ganz gut gelöst zu haben.
-
Jetzt gibts ja nur 3 Möglichkeiten
1. Alles richtig gemacht
2. Alles total falsch und hoffnungslos verloren
3. Zu kompliziert beschrieben dass es keiner Versteht.
-
Ich würde das über virtuele Funktionen lösen. Die TierKlasse sollte Dir sagen welches Futter es will.
Warum soll die ZooBerlin Klasse extra eine Funktion HundeFutter ausbilden?
-
Die TierKlasse sollte Dir sagen welches Futter es will:
Wie schaffe ich es dann die Reihenfolg einzuhalten
Warum soll die ZooBerlin Klasse extra eine Funktion HundeFutter ausbilden?
Macht Sie doch bisher auch nicht!
-
Was für eine Reihenfolge?
FutterArt art = tier->WasBenoetigstDuAnFutter(); FutterMenge menge = tier->WasBenoetigstDuAnFutterMenge(); Futter futter = zoo->BesorgeFutter(art,menge); tier->Fuettere(futter);
-
Was für eine Reihenfolge
Die "Fütterung" muss genau in der Reihenfolge stattfinden wie im Enum angegeben.
Also erst muss in allen Zoos die Hunde gefüttert werden. Vorausgesetzt man hat nen Hund. usw.Das steht in meinem Beitrag
Zum Code nun ja. Das ist eigentlich was ganz anderes. Ich glaub das lassen wir lieber bevor ich mich hier verkopfe um weiter das Problem zu erklären. Dann stecke ich meine Zeit lieber in die Problemlösung
-
Was haben enums bitte mit den Objekten zu tun?
Wenn Du die Objekte in die Reihenfolge bringen willst wie die enums sagen, dann musst Du keine enums enumerieren.
Du fragst das Objekt nach seinnem Typ und packst es mit seinem enum in eine map, dann ist die Reihefolge gegeben, die Du möchtest.Für was musst Du enums iterieren?
Ich sehe immer noch keinen Grund.
-
Du fragst das Objekt nach seinem Typ und packst es mit seinem enum in eine map, dann ist die Reihefolge gegeben, die Du möchtest.
Ja das habe ich ja nun gemacht. Dachte ja nur dass ich die map, bzw. in meinem Fall das Array, weglassen kann da die Reihenfolge schon im Enum vorgegeben ist.
Aber wenn das nicht geht ist es halt so. Und bin dann ja auch mit zufrieden.
Vielen Dank auf jeden Fall für die Unterstützung.
-
y-vonne schrieb:
Jetzt gibts ja nur 3 Möglichkeiten
1. Alles richtig gemacht
2. Alles total falsch und hoffnungslos verloren
3. Zu kompliziert beschrieben dass es keiner Versteht.4. Anhand eines zu abstrakten (und schlechten?) Beispiels beschrieben, so dass keiner weiss was du eigentlich wirklich machen willst. [X]