2 मैट्रिक्स structs है बराबर डेटा का मतलब है, लेकिन इन की तरह अलग अलग रूप है:सी संरचना को कैसे एक और संरचना प्रकार कास्ट करने के लिए करें यदि उनकी मेमोरी आकार बराबर है?
// 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;
उनकी स्मृति आकार के बराबर हैं। तो मेरा मानना है कि वहाँ एक रास्ता इस तरह किसी भी सूचक आपरेशन के बिना इन प्रकार बदल सकते हैं या कॉपी करने के लिए है:
// Implemented in external lib.
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
Matrix m = (Matrix)CATransform3DMakeScale (1, 2, 3);
यह संभव है? वर्तमान में संकलक एक "त्रुटि: गैर-स्केलर प्रकार के अनुरोध में रूपांतरण" संदेश प्रिंट करता है।
शानदार। लेकिन मेरी राय में, यह एक प्रकार का प्रॉक्सी वैरिएबल की आवश्यकता है। क्या यह कुछ प्रतिलिपि नहीं बनाता है? – Eonil
नहीं - बस एक टाइपिफ़ के रूप में एक संघ को परिभाषित करें - उदाहरण के ऊपर देखें। –
संघ सबसे अच्छा विचार है। अधिकांश प्रकार के सुरक्षित, सरल रूपांतरण, कोई ओवरहेड नहीं। – Puppy