2011-07-14 5 views
8

MFC CArray वर्ग (MSDN से) दो टेम्प्लेट पैरामीटर है:एमएफसी कैरे में, विभिन्न डिफ़ॉल्ट टेम्पलेट प्रकार का उपयोग करने के कारण क्या हैं?

template < class TYPE, class ARG_TYPE = const TYPE& > 
class CArray 
... 

ARG_TYPE के लिए डिफ़ॉल्ट पैरामीटर const TYPE& है, और (Should the ARG_TYPE for a CArray be const & or not जैसे डिफ़ॉल्ट से एक प्रकार विभिन्न उपयोग करने के लिए जब इतने पर कुछ सवाल पूछना, या What's the difference between CArray and CArray ?)।

मेरे प्रश्न अब हैं: क्या कैरे के उचित उपयोग के मामले हैं जहां ARG_TYPE TYPE या const TYPE& नहीं है, उदा। एक और कक्षा? इन उपयोगों के कारण क्या हैं?

+3

आपके प्रश्न का उत्तर नहीं है, लेकिन ** ** 'कैरे' का उपयोग न करें। यह एक भयानक वर्ग है जो प्रतिलिपि निर्माण के बजाय 'memcpy' का उपयोग करके अपने तत्वों की प्रतिलिपि बनायेगा। इसलिए यदि आप ऑब्जेक्ट्स की एक सरणी रखने के लिए इसका उपयोग करते हैं जिसमें पॉइंटर्स होते हैं तो आपका एप्लिकेशन क्रैश हो जाएगा। इसके बजाए 'std :: vector' का प्रयोग करें। – Praetorian

+0

मैं तर्कों की खोज कर रहा हूं कि सीएआरआरई का उपयोग न करें और एसडीडी :: वेक्टर का उपयोग करने के लिए सहकर्मियों को मनाने के लिए, और मुझे इस विषमता के बारे में आश्चर्य हुआ। सीएमएपी 4 टेम्पलेट पैरामीटर के साथ और भी भयानक है और मानचित्र में सॉर्ट ऑर्डर निर्धारित करने का एक जटिल तरीका है ... – vividos

उत्तर

2

मेरा अनुमान है कि, यह विरासत पदानुक्रम से संबंधित होना चाहिए।

struct B {}; 
struct D : B {}; 

CArray<D, const B&> myArray; 

आप प्राप्त तर्क है, जो व्युत्पन्न class से एक const संदर्भ प्राप्त कर सकते हैं के रूप में आधार class है कर सकते हैं।

1

मेरा सबसे अच्छा उदाहरण CArray <CString, LPCTSTR> है। वास्तव में, मुझे याद है कि CArray <CString, CString&> बहुत अच्छी तरह से काम नहीं किया ...

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