dynamic structures
Thomas Hertweck <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <[email protected]> |
Hallo!
Eine eher generelle Frage, ob folgendes in C++ moeglich ist (bzw. wie man
so etwas aehnliches erzielen kann):
Ich muss Daten von der Festplatte lesen, die ein bestimmtes Layout haben,
ein Mix aus short, int, float und double. Im Prinzip waere es relativ
einfach, wenn das Layout stets das Gleiche waere, man koennte dann einfach
einen statischen struct wie z.B.
struct data {
double xcoordinate;
double ycoordinate;
int counter;
float attribute;
};
definieren und sizeof(struct data) einlesen und haette direkt Zugriff auf
alle Variablen (ggf. nach byte-swapping, da die Variablen u.U. als big
endian abgelegt sind). So weit so gut.
Dummerweise kommt es vor, dass manchmal die Reihenfolge der Variablen sich
aendert und z.B. "attribute" vor "counter" kommt im obigen Beispiel. Ein
statischer struct ist also nicht moeglich (es sei denn, man wollte das
Programm stets neu compilieren, das ist aber aus praktischer Sicht nicht
moeglich).
Das Layout des struct kann ich einfach ueber eine XML Datei beschreiben
(Variablen-Name, Typ, Byte-Offset, usw.). Es waere nun schoen, wenn man
den struct quasi on-the-fly dynamisch definieren koennte zur Laufzeit. Ist
so etwas in der Art moeglich?
Meine momentane Loesung funktioniert, ist aber nicht all zu elegant: Die
XML Datei wird geparst und es wird in einer Hash-Map abgespeichert, welche
Variable an welchem Byte-Offset zu finden ist (z.B. Variable names
"counter" ist vom Typ "int" und im obigen Beispiel bei Byte-Offset 16 bis
19 zu finden). Die Daten werden dann schlicht von Festplatte in den
Speicher gelesen. Ueber eine Funktion kann dann jede Variable ausgelesen
werden, wobei die Hash-Map befragt wird, an welchem Byte-Offset die
Variable mit dem Namen sitzt (und welchen Typ sie hat, etc). Gibt es etwas
eleganteres als Loesung?
Danke fuer Ideen,
Thomas