चलो कहते हैं कि मैं दो अलग-अलग वर्गों करते हैं, दोनों का प्रतिनिधित्व 2 डी निम्नलिखित की तरह एक ही आंतरिक रास्ते में डेटा समन्वय: दो वर्गों समान और ऊपर समारोह किया जा रहा है यह देखते हुएदो समान वर्गों के पॉइंटर्स के बीच कास्टिंग की सुरक्षा?
class LibA_Vertex{
public:
// ... constructors and various methods, operator overloads
float x, y
};
class LibB_Vertex{
public:
// ... same usage and internal data as LibA, but with different methods
float x, y
};
void foobar(){
LibA_Vertex * verticesA = new LibA_Vertex[1000];
verticesA[50].y = 9;
LibB_Vertex * verticesB = reinterpret_cast<LibB_Vertex*>(vertexA);
print(verticesB[50].y); // should output a "9"
};
, मैं मज़बूती से इस सूचक रूपांतरण पर भरोसा कर सकते हर मामले में उम्मीद के रूप में काम कर रहे हैं?
(पृष्ठभूमि, यह है कि मुझे वर्टेक्स कक्षाओं के समान दो अलग-अलग पुस्तकालयों के बीच वर्टेक्स सरणी का व्यापार करने का एक आसान तरीका चाहिए, और मैं अनावश्यक रूप से सरणी की प्रतिलिपि से बचना चाहता हूं)।
इन रूपांतरणों को करने का एक और अच्छी तरह से परिभाषित तरीका एक सामान्य प्रारंभिक अनुक्रम के साथ एक संघ का उपयोग करना है (जैसा कि '§9.2/1 9' द्वारा अनुमत है)। – Mankarse
ओह! खैर, सी ++ 11 बचाव के लिए। मुझे उम्मीद है कि यह चीजों में से एक था VS2010 ने मानक के माध्यम से चेरी चुनने के दौरान जोड़ने का फैसला किया। –
@Clairvoire: यह उन चीजों में से एक है जो हमेशा अभ्यास में काम करते थे, भले ही औपचारिक रूप से मना किया गया हो। मुझे उम्मीद नहीं है कि किसी भी कंपाइलर लेखकों को समर्थन "जोड़ना" था। उद्धरण के लिए –