2010-11-05 23 views
6
class Example { 

    // ... 
}; 

template <typename T, Example ex> //Error 
class MyExample{ 

    // ... 
}; 

मेरा प्रश्न यह है कि टेम्पलेट गैर-प्रकार पैरामीटर क्लास प्रकार का क्यों नहीं हो सकता है?क्यों टेम्पलेट गैर प्रकार पैरामीटर क्लास प्रकार

त्रुटि है कि मैं पाने के

error: ‘class Example’ is not a valid type for a template constant parameter

+2

कृपया स्पष्ट करें - आप किस प्रकार की कंपाइलर त्रुटि देख रहे हैं? – seand

+0

कोशिश करें (उदाहरण * पूर्व)। यह काम करेगा:] – k06a

+0

शायद (उदाहरण और पूर्व) काम करता है। कोशिश करो । । । – k06a

उत्तर

13

सीधे शब्दों में है, क्योंकि उन नियम हैं। तर्कसंगत रूप से, टेम्पलेट पैरामीटर को संकलित समय पर हल किया जाना चाहिए और कक्षा के प्रकार की वस्तुओं को केवल समय पर निर्मित किया जाता है (यहां तक ​​कि अस्थायी और स्थिर भंडारण अवधि वाले भी) रन टाइम पर। आपके पास केवल टेम्पलेट पैरामीटर हो सकते हैं जो पूर्णांक और प्रकार जैसे संकलन समय पर "मान" को हल करने योग्य हैं। टेम्पलेट पैरामीटर होना संभव है जो ऑब्जेक्ट्स के पॉइंटर्स या संदर्भ हैं।

3
c++ standard के अनुसार

,

A non-type template-parameter shall have one of the following (optionally cv-qualified) types: 
— integral or enumeration type, 
— pointer to object or pointer to function, 
— reference to object or reference to function, 
— pointer to member. 

A non-type template-parameter shall not be declared to have floating point, **class**, or void type. 

यह है कि किसी भी एसटीडी संकलक अनुरूप एक त्रुटि फेंकता है तो आप गैर प्रकार टेम्पलेट तर्क के रूप में वर्ग की घोषणा स्पष्ट है।

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