Mir ist gerade aufgefallen, dass man die Standard-Mathematik-Operatoren nicht auf eine enum
wie zum Beispiel ++
o +=
.
Wie kann man also am besten durch alle Werte in einer C++-Datei iterieren? enum
?
Mir ist gerade aufgefallen, dass man die Standard-Mathematik-Operatoren nicht auf eine enum
wie zum Beispiel ++
o +=
.
Wie kann man also am besten durch alle Werte in einer C++-Datei iterieren? enum
?
Wenn Sie wüssten, dass die Enum-Werte sequentiell sind, zum Beispiel das Qt:Key-Enum, könnten Sie das:
Qt::Key shortcut_key = Qt::Key_0;
for (int idx = 0; etc...) {
....
if (shortcut_key <= Qt::Key_9) {
fileMenu->addAction("abc", this, SLOT(onNewTab()),
QKeySequence(Qt::CTRL + shortcut_key));
shortcut_key = (Qt::Key) (shortcut_key + 1);
}
}
Es funktioniert wie erwartet.
Mit einem Lambda, fand ich dies die beste (modern) Weg der Schleife über Enums. Dadurch wird die Abstraktion stark verbessert. Man kann es sogar zu einer Vorlage machen, so dass es auf jede Enum anwendbar ist. Dieser Code gibt Ihnen auch keine Probleme mit clang(-tidy).
#include <functional>
/// @brief Loop over all enum values where the last enum value is the invalid one
void forEachAction(std::function<void(Enum)> &&doThis) {
for (int value = 0; value = static_cast<int>(Enum::LastValue); ++value ) {
doThis(static_cast<Enum>(value ));
}
}
...
forEachAction([this](Enum value) {
... // what you want to execute for every enum
});
Erstellen Sie einfach ein Array von Ints und führen Sie eine Schleife über das Array durch, aber lassen Sie das letzte Element -1 sagen und verwenden Sie es als Ausstiegsbedingung.
Wenn enum ist:
enum MyEnumType{Hay=12,Grass=42,Beer=39};
dann Array erstellen:
int Array[] = {Hay,Grass,Beer,-1};
for (int h = 0; Array[h] != -1; h++){
doStuff( (MyEnumType) Array[h] );
}
Dies funktioniert unabhängig von der Anzahl der Ints in der Darstellung, solange -1 check natürlich nicht mit einem der Elemente kollidiert.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.