I 2 Matrix structs haben bedeutet gleiche Daten haben aber unterschiedliche Form, wie diese:Wie C Cast nur einen anderen Strukturtyp, wenn ihre Speichergröße gleich sind?
// Matrix type 1.
typedef float Scalar;
typedef struct { Scalar e[4]; } Vector;
typedef struct { Vector e[4]; } Matrix;
// Matrix type 2 (you may know this if you're iPhone developer)
// Defines CGFloat as float for simple description.
typedef float CGFloat;
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
Die Speichergrößen gleich sind. Also ich glaube, dass es einen Weg gibt, diese Art ohne Zeigeroperationen oder kopieren, so zu konvertieren:
// Implemented in external lib.
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
Matrix m = (Matrix)CATransform3DMakeScale (1, 2, 3);
Ist das möglich? Zur Zeit gibt der Compiler die Meldung "Fehler: Konvertierung in nicht skalaren Typ angefordert" aus.
Brilliant. Meiner Meinung nach erfordert dies eine Art Proxy-Variable. Führt es nicht zu etwas Kopieren? – Eonil
Nein - definieren Sie einfach eine Union als typedef - siehe oben Beispiel. –
Die Union ist die beste Idee. Die meisten Typ-Safe, einfachste Konvertierung, kein Overhead. – Puppy