/ / दो तृतीय पक्ष प्रकारों के बीच रूपांतरण कैसे लागू करें? - सी ++, सी ++ 11, कास्टिंग, प्रकार-रूपांतरण

दो तीसरे पक्ष के प्रकार के बीच रूपांतरण को लागू करने के लिए कैसे?-c , c 11, ढलाई, प्रकार-कनवर्ज़न

मैं दो स्वतंत्र तीसरे पक्ष के पुस्तकालयों का उपयोग कर रहा हूंमेरे C ++ प्रोजेक्ट (Qt, cocos2d) में। दोनों अपने अपने संस्करण 2d और 3D वैक्टर को परिभाषित करते हैं। मैं कस्टम निहित (या स्पष्ट) रूपांतरण विधियों को कैसे लागू कर सकता हूं, ताकि मुझे इस तरह के नए उदाहरण स्पष्ट रूप से बनाने न हों:

// mousePosition is of type QPointF
auto position = cocos2d::Vec2(mousePosition.x(), mousePosition.y())

बेशक, मैं वास्तव में पुस्तकालय के स्रोत को संशोधित नहीं कर सकता। ओब्ज-सी या सी # में मैं क्लास एक्सटेंशन का उपयोग कर सकता हूं। मैं सी ++ के बारे में निश्चित नहीं हूं। क्या सादे वैश्विक कार्यों की तुलना में कोई बेहतर समाधान है?

उत्तर:

जवाब के लिए 2 № 1

लागू करने का कोई तरीका नहीं है अंतर्निहित परिवर्तन के बिना दो प्रकारों के बीच रूपांतरणउन दोनों में से कोई भी। इसे यंत्रवत् रूप से समझाया जा सकता है: इस तरह के रूपांतरण को एक निर्माता या एक रूपांतरण ऑपरेटर होना चाहिए, जिसमें दोनों सदस्य होने चाहिए।

अधिक ज्ञानवर्धक व्याख्या यह है कि इस तरह के अंतर्निहित रूपांतरण प्रकारों के मौजूदा उपयोग को तोड़ सकते हैं (जैसे, अस्पष्टता का परिचय देते हुए)। टेम्प्लेट के साथ, अतिरिक्त ओवरलोड (या, इस काल्पनिक मामले में, अधिक व्यवहार्य बनाने के लिए) को परिभाषित किए जाने के बाद आसानी से अपरिभाषित व्यवहार हो सकता है।

इसलिए आपका रूपांतरण स्पष्ट होना चाहिए और फिर यह तुच्छ है: परिभाषित

B convert(const A&);
A convert(const B&);

जितने के लिए A-B आवश्यक के रूप में जोड़े; आसानी से, उन्हें अलग-अलग नामों की भी आवश्यकता नहीं है, क्योंकि परिकल्पना द्वारा उनके बीच कोई अंतर्निहित रूपांतरण नहीं है।