enum - werte erfragen?!
-
Oder führ parallel noch ein Array mit Name + Wert.
-
vielen Dank!
-
David_pb schrieb:
Oder führ parallel noch ein Array mit Name + Wert.
Besser eine std::map<EnumName, std::string>, denn Enums sind nicht zwangsläufig linear (oder positiv).
-
Alternativ könnte dein Code auch die entsprechende Quellcode-Datei einlesen und das Enum parsen und daraus den Testcode generieren (du musst halt nicht nur die Labels, sondern auch die zugehörigen Integer-Werte ermitteln). Wenn du das schön machst ist das sicher die beste Methode, könnte ja ungefähr so aussehen:
void test_enum( const char* source_file, const char* enum_name, Callback cb );Und für jeden Wert im Enum ruft test_enum dann das Callback-Objekt auf welches den eigentlichen Test-Code enthält.
-
Hab gerade mal ein wenig gegoogled und bin auf ein paar Vorschläge gestoßen, aber keiner derer schien mir sicher für den Fall von Wertesprüngen innerhalb des Enums oder eben negativen Werten.
-
Fellhuhn schrieb:
David_pb schrieb:
Oder führ parallel noch ein Array mit Name + Wert.
Besser eine std::map<EnumName, std::string>, denn Enums sind nicht zwangsläufig linear (oder positiv).
Ich meinte eher sowas:
struct info { const char* name; int value; }; // ... info x[] = { { "foo", 0 }, { "bar", 4 } // ... };
-
Danke!
da der code für den enum gegeben ist, scheint mir die Variante mit dem parsen des Source-Codes die sinnvollste zu sein?!
Ich werd mir die Sache mal anschaun...
-
dermoritz schrieb:
Danke!
da der code für den enum gegeben ist, scheint mir die Variante mit dem parsen des Source-Codes die sinnvollste zu sein?!
Ich werd mir die Sache mal anschaun...Es wäre natürlich von Vorteil, wenn du innerhalb der Dateien noch eine Art Versionsnummer hast damit du in test_enum prüfen kannst ob die Datei nicht verändert wurde seit das Testprogramm übersetzt wurde (das hat die gleiche Datei ja beim Kompilieren inkludiert/gelinkt und mein Vorschlag geht natürlich nur, wenn die Datei nicht nach dem Kompilieren geändert wurde).
-
Tippgeber schrieb:
dermoritz schrieb:
Danke!
da der code für den enum gegeben ist, scheint mir die Variante mit dem parsen des Source-Codes die sinnvollste zu sein?!
Ich werd mir die Sache mal anschaun...Es wäre natürlich von Vorteil, wenn du innerhalb der Dateien noch eine Art Versionsnummer hast damit du in test_enum prüfen kannst ob die Datei nicht verändert wurde seit das Testprogramm übersetzt wurde (das hat die gleiche Datei ja beim Kompilieren inkludiert/gelinkt und mein Vorschlag geht natürlich nur, wenn die Datei nicht nach dem Kompilieren geändert wurde).
Genauer: wenn das Enum nach dem Kompilieren nicht geändert wurde.
-
kann doch ins makefile rein.