Re: dynamic structures
Martin Hofius <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <[email protected]> |
Hallo Thomas,
Am Sonntag, 12. Juli 2009 schrieb Thomas Hertweck:
> 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;
> };
Das sieht sehr übersichtlich aus - ich vermute aber, dass das im realen
Programm etwas länger ist?
>
> 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
...
> 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?
Ich denke, dazu fehlen einfach noch ein paar Informationen. Sind die
Datentypen fest an die einzelnen Variablen gekoppelt oder wechseln die auch?
(z.B. xccordinate mal als double, mal als int)
Wenn die fest wären, könntest Du die Daten in einen Speicherbereich einlesen
und in dem struct die Variablen als Pointer deklarieren, die Du dann
entsprechend dem Aufbau in der Datei passend auf die einzelnen Bestandteile
setzt.
Oder: Wieviele Kombinationen gibt es für die Reihenfolge der Variablen? Du
könntest verschiedene struct definieren und dann passend casten. Passt
natürlich nur für eine kleine Menge an Kombinationen und auch nur dann, wenn
es Dir sowohl beim Lesen aus der Datei wie auch beim Zugriff auf Performance
ankommt.
Gruß
Martin