2011-02-23 13 views
7

मैं एक वर्ग ABC नाम जो एक वर्ग टेम्पलेट है है:सी ++ टेम्पलेट की ओर इशारा का उपयोग वस्तुओं

class CDE{ 
private: 
    list<ABC *> some_list; 
} 

:

template <class T> class ABC{} 

अन्य वर्ग मैं एक सूची में वस्तुओं की दुकान एबीसी कोशिश कर रहा हूँ में मैं एबीसी की वस्तुओं को स्टोर करना चाहता हूं जिसमें अलग-अलग वर्ग टेम्पलेट पैरामीटर हो सकते हैं। संकलन समय पर सूचक के लिए भी टेम्पलेट निर्दिष्ट करना आवश्यक है? क्या होगा यदि कंटेनर को विभिन्न प्रकार की वस्तुओं को स्टोर करना चाहिए? क्या यह संभव नहीं है?

उत्तर

7

तो यह और भी संकलन समय पर सूचक के लिए टेम्पलेट निर्दिष्ट करने के लिए आवश्यक है?

हां।

क्या होगा यदि कंटेनर को विभिन्न प्रकार की वस्तुओं को स्टोर करना है? क्या यह संभव नहीं है?

यह (सीधे) संभव नहीं है।

कक्षा एबीसी जैसी कोई चीज़ नहीं है। एबीसी की केवल तात्कालिकताएं हैं, जैसे कि ABC<Foo> और ABC<Bar>। ये पूरी तरह से अलग वर्ग हैं।

आप की तरह कुछ कर सकते हैं:

template<typename T> 
class ABC : public ABC_Base 
{ 
    ... 
} 

list<ABC_Base*> some_list; 

ऐसा करने से, अपने एबीसी instantiations के सभी एक आम आधार प्रकार है, और आप मनमाने ढंग से एक आधार सूचक का उपयोग कर सकते हैं।

+0

यह थोड़ा नकारात्मक के साथ पर्याप्त उचित लगता है। टेम्पलेट्स का उपयोग करने का पूरा कारण यह सुनिश्चित करना था कि वस्तुओं को कसकर जोड़ा गया था। इस तरह अभी भी टेम्पलेट प्रकार के बिना ABC_Base (या इसके व्युत्पन्न कक्षाओं) की ऑब्जेक्ट्स बनाने का मौका है और उन्हें सूची में उपयोग करें। – cyrux

+4

@cyrux यदि आप 'एबीसीबीएएस' सार बनाते हैं, तो कोई भी 'एबीसीबीएसई' की वस्तुएं नहीं बना सकता है। – user470379

1

आपको या तो अपने CDE कक्षा में टेम्पलेट पैरामीटर निर्दिष्ट करने की आवश्यकता है, या CDE एक टेम्पलेट भी बनाएं।

पहले विकल्प:

class CDE { 
private: 
    list< ABC<int>* > some_list; 
}; 

दूसरा विकल्प:

template <class T> 
class CDE { 
private: 
    list< ABC<T>* > some_list; 
}; 
1

सूची केवल एक ही प्रकार को स्टोर कर सकती है। टेम्पलेट के विभिन्न तत्काल विभिन्न प्रकार हैं। आप विभिन्न प्रकार के उपयोग करने के लिए की जरूरत है

template <class T> class CDE{ private: list<ABC<T> *> some_list; }

, शायद आपको लगता है कि करने के लिए एबीसी और दुकान संकेत के लिए एक गैर टेम्पलेट आधार वर्ग बना सकते हैं: यदि यह संतोषजनक है, तो आप इस तरह कर सकते हैं। (यानी एक इंटरफ़ेस का उपयोग करें)

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