foreach mit enum?
-
Gibt es in C++ eine Möglichkeit eine Schleife automatisch über alle Elemente eines enum laufen zu lassen?
-
Glaubs nicht, vorallem wenns enum löcher hat.
-
Nicht ohne Macro-Magic. Ich hasse die C++03 Enums...
-
Wieso?
enum
s sind primär Aufzählungstypen, bei denen eine genau festgelegte Anzahl Zustände möglich ist. Die implizite Konvertierung zu integralen Typen ist eher ein Zusatzfeature. Eine Schleife über alle Enumeratoren laufen zu lassen ist vergleichbar mit dem Versuch, alle möglichen Werte vonint
zu durchlaufen.Für die Fälle, bei denen eine Zuordnung gewünscht wird, sollte man
std::map
einsetzen, dann hat man auch Iteratoren. Oder einen sequenziellen Container, wenn die Enumerator-Werte direkt aufeinander folgen.
-
@Nexus: was soll das bla bla?
Eine Schleife über alle Enumeratoren laufen zu lassen ist vergleichbar mit dem Versuch, alle möglichen Werte von int zu durchlaufen.
Dass das totaler Unfug ist ist die hoffentlich klar?
-
Hier Code wo ich genau das mit einem zusätzlichen lokalen Array umgesetzt habe:
vector<int> axisIDArray; axisIDArray.push_back(QwtPlot::xBottom); axisIDArray.push_back(QwtPlot::yLeft); axisIDArray.push_back(QwtPlot::yRight); for (int i = 0; i < (int)axisIDArray.size(); i++) { QwtPlot::Axis axisId = static_cast<QwtPlot::Axis>(axisIDArray[i]); setAxisTitle(axisId, plot->axisTitle(axisId)); }
wäre natürlich schöner gewesen, wenn man es hätte so schreiben können:
foreach(QwtPlot::Axis axisID) { setAxisTitle(axisId, plot->axisTitle(axisId)); }
aber dafür müsste es wohl in C++ in den Specs definiert sein.
-
hustbaer schrieb:
Dass das totaler Unfug ist ist die hoffentlich klar?
Nein, sonst würde ich es nicht schreiben. [...]
Edit: Ich hab das Ganze nochmals überdacht, tut mir leid wegen meines unangebrachten Einwands. Ich hatte selber bisher kaum solche Fälle und konnte es mir deshalb nicht wirklich vorstellen.