2010-02-07 13 views
7

दो असंबंधित वर्गों "वर्ग ए" और "वर्ग बी" और एक समारोह के लिएसी ++ ऑटो रूपांतरण

B convert(const A&); 

वहाँ एक रास्ता सी ++ बताने के लिए स्वचालित रूप से करने के लिए किसी भी समारोह है कि के रूप में "वर्ग बी" लेता है, है एक "कक्षा ए" को स्वतः रूपांतरित करने के लिए तर्क।

धन्यवाद!

class B 
{ 
public: 
    B(const A&); 
}; 

और वहाँ रूपांतरण:

+2

यदि आप कक्षा ए या कक्षा बी के लिए कक्षा परिभाषाओं को नहीं बदल सकते हैं तो ऐसा करने का कोई अच्छा तरीका नहीं है। – Omnifarious

उत्तर

10

क्या आप सामान्य रूप से इस मामले में क्या करना होगा B एक निर्माता है कि एक A लेता देना है। संकलक कहेंगे "मैं AB कैसे बना सकता हूं? ओह, मुझे BA से बनाया जा सकता है"।

एक अन्य विधि एक रूपांतरण ऑपरेटर का उपयोग करने के लिए है:

class A 
{ 
public: 
    operator B(void) const; 
} 

और संकलक कहेंगे "मैं कैसे A कर सकते हैं एक B ओह, मैं देख रहा हूँ AB लिए परिवर्तित किया जा सकता है?"।

ध्यान रखें कि इन्हें दुरुपयोग करना बहुत आसान है। सुनिश्चित करें कि यह वास्तव में इन दो प्रकारों के लिए एक-दूसरे को रूपांतरित करने के लिए समझ में आता है।

+3

मैं निहित रूपांतरण ऑपरेटरों से संबंधित चेतावनी को दूसरा स्थान देता हूं। पिछले दस सालों के दौरान, जब भी मैं ऐसी चीज पेश करने का लुत्फ उठाता था (एक स्ट्रिंग क्लास के अपवाद के साथ मैंने एक बार लिखा था), जल्दी या बाद में जब कोई इसे उम्मीद नहीं करता था और इस तरह कोड से हटा दिया जाता था - अक्सर काफी कीमत पर यह भी ध्यान रखें कि कंपाइलर हमेशा ही _one_ उपयोगकर्ता-परिभाषित रूपांतरण को हमेशा ही बुलाएगा। इसलिए यदि 'बी' से 'सी' तक उपयोगकर्ता द्वारा परिभाषित रूपांतरण भी है, तो आप' ए 'के साथ' शून्य एफ (सी) 'को कॉल नहीं कर सकते हैं, क्योंकि उसे दो रूपांतरणों की आवश्यकता होगी। – sbi

1

आप एक कास्ट ऑपरेटर, या एक पैरामीटर कन्स्ट्रक्टर की आपूर्ति कर सकते हैं।

संबंधित मुद्दे