के साथ एक आंतरिक वर्ग सदस्य फ़ंक्शन टेम्पलेट को परिभाषित करना मुझे एक गैर-प्रकार (enum) तर्क पर टेम्पलेट किया गया है जो एक आंतरिक वर्ग Outer<T1>::Inner
के सदस्य फ़ंक्शन update()
को परिभाषित करने और विशेषज्ञता करने में कठिनाई हो रही है।एक (गैर प्रकार) enum तर्क
#include <cstdlib>
template<typename T1>
struct Outer
{
struct Inner
{
enum Type{ A , B , C };
template<Type T2>
void update();
};
};
// Definition
template<typename T1>
template<Outer<T1>::Inner::Type T2>
void Outer<T1>::Inner::update()
{
}
// Specialization
template<typename T1>
template<Outer<T1>::Inner::A >
void Outer<T1>::Inner::update()
{
}
int main()
{
return EXIT_SUCCESS;
}
मैं जीसीसी में निम्न त्रुटि संदेश मिल रहा है 4.5.3
prog.cpp:17:28: error: ‘Outer::Inner::Type’ is not a type
prog.cpp:18:6: error: prototype for ‘void Outer<T1>::Inner::update()’ does not match any in class ‘Outer<T1>::Inner’
prog.cpp:11:15: error: candidate is: template<class T1> template<Outer<T1>::Inner::Type T2> void Outer<T1>::Inner::update()
prog.cpp:24:28: error: ‘Outer::Inner::A’ is not a type
prog.cpp:25:6: error: prototype for ‘void Outer<T1>::Inner::update()’ does not match any in class ‘Outer<T1>::Inner’
prog.cpp:11:15: error: candidate is: template<class T1> template<Outer<T1>::Inner::Type T2> void Outer<T1>::Inner::update()
Btw, जीसीसी के विपरीत, विजुअल स्टूडियो 2008 निम्नलिखित संकलन करने में असमर्थ है
template<typename T1>
struct Outer
{
struct Inner
{
enum Type{ A , B , C };
template<Type T2>
struct Deep;
};
};
template<typename T1>
template<typename Outer<T1>::Inner::Type T2>
struct Outer<T1>::Inner::Deep
{
};
मुझे कुछ समय में देखा गया वीसी2012 से अधिक विनोदी त्रुटि संदेशों में से एक को स्वीकार करना है: 'त्रुटि C2244:' बाहरी :: इनर :: अपडेट ': मौजूदा घोषणा के लिए फ़ंक्शन परिभाषा से मिलान करने में असमर्थ, परिभाषा 'शून्य बाहरी :: इनर :: अपडेट (शून्य)', मौजूदा घोषणाएं: 'शून्य बाहरी :: इनर :: अपडेट (शून्य) "मौजूदा और वांछित घोषणाओं के बीच हड़ताली अंतर इतना स्पष्ट है, है यह = पी –
WhozCraig
मैं टिप्पणी करने वाला था कि विजुअल स्टूडियो 2008 स्वीकृति नहीं देता है। क्या आसपास कोई काम है? मैं वास्तव में वीएस में कोडिंग कर रहा हूँ। मैं स्वच्छता अनुपालन जांच के लिए जीसीसी का उपयोग करता हूं। – Olumide
@ ओलुमाइड आप जो कर रहे हैं उसके लिए एक रनटाइम चेक पर्याप्त होगा? संकलक सबसे अधिक संभावना चेक और मृत कोड को अनुकूलित करेगा क्योंकि यह जानता है कि यह हमेशा सत्य या गलत होगा। –