2010-06-16 17 views
7

इस कोड:टेम्पलेट क्लास जो खुद को टेम्पलेट टेम्पलेट पैरामीटर के रूप में संदर्भित करती है?

template <template <typename> class T> 
class A 
{ 
}; 

template <typename T> 
class B 
{ 
    A<B> x; 
}; 

संकलन नहीं है, मुझे लगता है के बाद से A<B>A<B<T> >B के दायरे के भीतर के रूप में व्याख्या की है।

तो, आप B को अपने दायरे में टेम्पलेट टेम्पलेट पैरामीटर के रूप में कैसे पास करते हैं?

+0

बस निम्नलिखित कार्य निर्दिष्ट नहीं करता है? क्योंकि टी किसी भी प्रकार का सरल या टेम्पलेट प्रकार भी हो सकता है ........... कोड _-------- टेम्पलेट कक्षा ए { }; – Pardeep

+0

@ पर्दीप: मैंने आपका पालन नहीं किया। 'ए' टी एक टेम्पलेट टेम्पलेट तर्क है। यह 'टेम्पलेट कक्षा ए {} 'से बहुत उदासीन है। – uj2

+0

आप संभवतः क्यों चाहते हैं? मैंने इसके लिए कभी भी कोई उपयोग नहीं देखा है। – Puppy

उत्तर

12

इस प्रयास करें: करने के लिए सी ++ स्टैंडर्ड 14.6.1/2 आप टेम्पलेट के सामान्य नाम का उपयोग करना चाहिए अनुसार

template <typename T> 
class B 
{ 
    A<::B> x; // fully qualified name for B 
}; 

(यानी, enclosing गुंजाइश, नहीं इंजेक्शन स्तरीय नाम से विकसित नाम) ।

+0

धन्यवाद। उसने ऐसा किया – uj2

+5

अच्छा एक :) ध्यान देने योग्य है कि ':: बी' से पहले की जगह की आवश्यकता है, हालांकि :) –