2009-08-23 15 views
5

मैं वास्तव में टेम्पलेट प्रकार C का एक सूचक आगे-घोषित करने के लिए है, तो जैसे तीन बयान, यानी इसफॉरवर्ड-घोषित टेम्पलेट सूचक

class A; 
template<class _T> class B; 
typedef B<A> C; 

तरह की ज़रूरत है मेरी अग्रेषित घोषणा में कक्षा A और B को छुपाने में सक्षम हो, क्या यह भी संभव है?

+0

और litb की 2-पंक्ति विधि थोड़ा कम सरल है। – rlbond

+0

@rlbond, एक जवाब के लिए 2-लाइन डरावना कोड मुझे –

उत्तर

8

हालांकि बिल्कुल वैसा ही नहीं, आप के बजाय ऐसा कर सकता है: कार्यान्वयन फ़ाइल में बाद में

class C; 
C* c = 0; 

और फिर, "के लिए शीर्षक फ़ाइलें के बाद

class C : public B<A> {}; 

एक typedef की विरासत का उपयोग करने के बजाय अगर आप केवल बी < एक > के डिफ़ॉल्ट निर्माता उपयोग करने की आवश्यकता काम करना चाहिए: सी "इस तरह ए" और "बी" को परिभाषित शामिल किया गया है, "।

+0

संपादित समझ सकते हैं: आप कार्यान्वयन फ़ाइल में 'ए' और 'बी' की घोषणा अग्रेषित करने के लिए जरूरत नहीं है। शीर्षलेख फाइलों को शामिल किया जाना चाहिए। – Ropez

+0

मेरे मन में क्या नहीं था, लेकिन एक महान सुझाव। धन्यवाद! –

+0

एक बहुत उपयोगी और चालाक समाधान, आप, @Ropez धन्यवाद! – Steed

1
इस तरह

मैं वास्तव में अपने प्रश्न समझ में नहीं आता है, लेकिन कोड:

template<class _T> class B; 

गैर कानूनी है। सी ++ रिजर्व नाम अंडरस्कोर और कंपाइलर & लाइब्रेरी कार्यान्वयन के लिए एक अपरकेस अक्षर के साथ शुरू होता है - आपको उन्हें अपने कोड में उपयोग करने की अनुमति नहीं है।

+0

धन्यवाद इस मदद चले गए और हटा दिया है कि, के बाद से मैं सिर्फ एक निजी सूचक के लिए यह उपयोग कर रहा हूँ, वहाँ केवल आरक्षित करने के लिए एक अच्छा तरीका होगा अंतर्निहित विवरण प्रकट किए बिना आवश्यक स्थान। –

3

हां आपको चाहिए। ध्यान दें कि सभी तीन पंक्तियां अलग-अलग चीजें करती हैं। पहले एक कक्षा घोषित करता है। दूसरा टेम्पलेट घोषित करता है, और तीसरा एक टाइपिफ़-नाम घोषित करता है। typedef नाम घोषित करने के लिए, आपको दायरे में इसका नाम (कुछ बुरा नुकसान के साथ शामिल है) के बिना वर्ग के नाम पर की तरह "वर्ग ए 'एक सविस्तार प्रकार निर्दिष्टकर्ता उपयोग कर सकते हैं - लेकिन आप आगे typedef घोषणा के साथ टेम्पलेट घोषणा पतन नहीं कर सकते हैं।

मैं तीन पंक्तियों के बारे में चिंता नहीं करता। यदि यह आवश्यक है, मैं सिर्फ उन्हें बाहर लिखते थे :)

+0

मैं आशा व्यक्त की थी के लिए –

+0

आपका क्या मतलब है? क्या आप इस सवाल में कोड लिख सकते हैं कि आप इसे कैसे देखना चाहते हैं और यह कैसा दिखता है? मुझे लगता है कि हम तो बेहतर यह –

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