Hallo allesamt,
mal eine programmiertechnische Frage. Folgendes Beispiel-Code-Schnipsel:
typedef struct { unsigned int id; union { struct_a; struct_b; } } mystruct;
typedef struct { int i; int c; } struct_a;
typedef struct { int i; string c; } struct_b;
Wenn ich jetzt ein Element von mystruct erzeugen will, muß der Compiler irgendwie rausfinden, welches Element der Union ich beschreiben will, d.h.
void do_something(unsigned int type) { mystruct s; if (type == TYPE_A) s.c = 50; if (type == TYPE_B) s.c = "Hello"; }
Frage: 1. Geht das hier beschriebene Beispiel problemlos (laut Dokumentation ist die Eventstruktur von SDL so aufgebaut, deswegen default=yes)
2. Wie funktioniert die Erkennung, auf welchen Typ der Union ich schreibe? In welchen Typ sich am besten casten laesst (default=dontknow)?
cu, Ulf
Am Sonntag 09 Dezember 2001 21:34 schrieben Sie:
...
void do_something(unsigned int type) { mystruct s; if (type == TYPE_A) s.c = 50; if (type == TYPE_B) s.c = "Hello"; }
Frage:
- Geht das hier beschriebene Beispiel problemlos (laut Dokumentation ist
die Eventstruktur von SDL so aufgebaut, deswegen default=yes)
- Wie funktioniert die Erkennung, auf welchen Typ der Union ich schreibe?
In welchen Typ sich am besten casten laesst (default=dontknow)?
Wenn string "char *" ist, sollte sich s.c (welches int für den gcc ist) problemlos auf "char *" casten lassen, da beides die gleiche Größe hat.
Falls aber string ein Objekt/Struct ist, g++ verweigert übrigens die Compilierung wenn du struct_a und struct_b keine unterschiedlichen Namen gibst mit denen du dann deine Typisierung hättest, sollte ein Cast von int auf string in die Hose gehen.
Stephan
On Tue, Dec 11, 2001 at 09:15:26PM +0100, Stephan Goetter wrote:
Falls aber string ein Objekt/Struct ist, g++ verweigert übrigens die Compilierung wenn du struct_a und struct_b keine unterschiedlichen Namen gibst mit denen du dann deine Typisierung hättest, sollte ein Cast von int auf string in die Hose gehen.
Ich hab's mir auch noch mal angeschaut, und festgestellt, dass die Frage so dumm war. Ich kann einfach verschiedene Strukturen verwenden und verwende fuer unterschiedliche Typen unterschiedliche Namen...
Stephan
Ulf
lug-dd@mailman.schlittermann.de