मेरे पास ऐसी स्थिति है जहां एक वर्ग परिभाषा है जो इस तरह दिखती है:

template<class T>
class Alpha< Bravo<T> >
{
....
};

मैं जीएनयू जी ++ के साथ संकलित कर रहा हूं और संकलक शिकायत कर रहा है कि अल्फा है, "टेम्पलेट नहीं है"।

मैंने लाइब्रेरी में इस्तेमाल की गई इसी तकनीक को देखा है जिसमें ब्रावो लिखा गया था और ब्रावो एक टेम्प्लेटेड क्लास है। क्या मैं कुछ भूल रहा हूँ? मैंने अल्फा को हड्डी से नीचे उतार दिया है और बिना किसी संकलन सफलता के परीक्षण किया है। मैंने उस जगह से कोड को कॉपी + पेस्ट करने का भी प्रयास किया है जहां मैंने इसे ब्रावो की लाइब्रेरी में काम करते हुए देखा था और वही चीज़, कोई सफलता नहीं, वही त्रुटि।

अग्रिम में धन्यवाद।

3
ct_ 14 जून 2011, 22:53
आपको नीचे दिए गए उत्तर को स्वीकार करना चाहिए जो आपको पसंद आया... सूची दृश्य से उत्तर के रूप में प्रश्न को चिह्नित करता है। :)
 – 
Mark McKenna
10 अक्टूबर 2012, 04:54

2 जवाब

सबसे बढ़िया उत्तर

आपके पास जो कुछ है वह आंशिक टेम्पलेट विशेषज्ञता है; हालांकि, किसी भी टेम्पलेट विशेषज्ञता को विशेषज्ञता के लिए एक प्राथमिक टेम्पलेट की आवश्यकता होती है, और वह आपके पास नहीं है।

template<class T>
class Alpha;

template<class T>
class Alpha<Bravo<T> >
{
    // ...
};
6
ildjarn 14 जून 2011, 22:57
एक विजेता की तरह शानदार काम करता है! यह आगे की घोषणा का उपयोग करके बहुत अधिक समझ में आता है। मैं वाक्य रचना से भ्रमित हो रहा था। धन्यवाद!
 – 
ct_
14 जून 2011, 23:00

आपको पहले प्राथमिक टेम्पलेट घोषित करने की आवश्यकता है। आपने जो लिखा है वह एक विशेषज्ञता है।

//primary template - the definition is optional
template<class T>
class Alpha
{
};

//specialization
template<class T>
class Alpha< Bravo<T> >
{
};
4
Nawaz 14 जून 2011, 22:57