class{ union{ struct{ wo liegt hier der Vorteil ?
-
gcc sagt dazu (aber nur mit -ansi -pedantic):
warning: ISO C++ prohibits anonymous structs
-
oops ganz vergessen, da is nochn typedef dum
typedef struct _D3DMATRIX {
-
Das hat ja nichts mit der anonymen Struktur zu tun.
-
Irgendwer schrieb:
koriegiere mich mal einer wenn ich mich da irren sollte
Ok sizeof(int)==sizeof(float) mistens
das hab ich ja garnicht behauptet, eher sowas
sizeof(deinUnion) == sizeof(größterDatentypImUnion) //beispiel: union { int a; float b; } test; sizeof(test) == sizeof(float);
-
union{ struct{ float _11,_12,_13,_14; _21,_22,_23,_24, _31,_32,_33,_34, _41,_42,_43,_44, }; float m[4][4]; };
Da die Struktur und die 4*4 Float-Matrix den gleichen Platz einnehmen, kannst du
über m[x][y] auf die member der Struktur zugreifen, das ist der Sinn davon.
-
Könnte man nicht auch einfach den []-Operator überladen?
-
hmm und wozu brauch man dann die einzelnen float werte selber? mithilfe des arrays sind sie doch "relativ" nutzlos...
-
Der Sinn ist mir nicht bekannt.
Und den []-Operator zu überladen wäre doch um einiges Aufwändiger als ne union
zu benutzen.
-
Die Union ist doch generell Blödsinn, weil ich über das 2d-Array auf die Werte zugreifen kann.
-
imho dient es wahrscheinlich nur der übersichtlichkeit für den programmierer, da er nämlich im kopf immer umrechnen müsste,wenn er einen wert der matrix abfragen will,falls er das array benutzt(matritzen fangen bei 1 an, arrays bei 0, das kann manchmal ne interessante fehlerquelle sein;))
-
otze schrieb:
imho dient es wahrscheinlich nur der übersichtlichkeit für den programmierer, da er nämlich im kopf immer umrechnen müsste,wenn er einen wert der matrix abfragen will,falls er das array benutzt(matritzen fangen bei 1 an, arrays bei 0, das kann manchmal ne interessante fehlerquelle sein;))
Ach quatsch. Wer so blöd ist und nicht umrechnen kann (bzw. eine Zugriffsfunktion schreiben kann die das "umrechnen" erledigt) sollte keine Matrizenoperationen von einem Programm erledigen lassen. Ich sehe jedenfalls keine Notwendigkeit für diesen zusammengehackten Mist. Kann höchstens sein, dass man bei Microsoft früher noch nicht so gute Debugger hatte und um in ein 2D-Array zu leuchten so rumhacken musste.
-
Hi,
der Grund ist denk ich ganz einfach, dass DirectX möglichst einfach zu bedienen sein sollen. Jetzt speichert aber jeder Programmierer die Matrizen am liebsten anders: Der eine als ein zweidimensionales Skalararray, der andere als ein eindimensionales Vektorarray und wieder ein anderer halt als einzelne Werte/Vektoren. Deswegen hat DirectX gleich zwei dieser Varianten von Haus aus drin, dem Compiler ist es ja egal wie man zugreift, die Adresse ist die gleiche.
Es ist halt nur eine Hilfe für den Programmierer.
ChrisM