C++ में यह एक funcction कि एक समारोह स्थानीय प्रकार लगता है ठीक है:टेम्पलेट स्थानीय प्रकार क्यों काम नहीं कर सकते हैं?
template<typename T> void Foo(const T& t) { }
int main() {
struct S { } s;
Foo(s); // Line 5: error: no matching function for call to 'Foo(main()::S&)'
}
14.3.1 paragraph 2 in the c++ standard.
के लिए टेम्पलेट-तर्क के रूप में उपयोग नहीं किया जाएगाएक प्रकार:
int main() { struct S { static void M(const S& s) { } }; S s; S::M(s); }
लेकिन ठीक नहीं एक है कि करता है टेम्पलेट के लिए बिना किसी लिंक के [...] टेम्पलेट प्रकार-पैरामीटर
सी ++ क्यों अस्वीकार करता है?
सबसे अच्छा विवरण मैं अब तक यह है कि आंतरिक प्रकार कोई संबंध है और इस संकेत सकता है कि कि एक समारोह है कि उन्हें एक आर्ग के रूप में लेता है कोई संबंध होना आवश्यक है सुना है। लेकिन ऐसा कोई कारण नहीं है कि मैं देख सकता हूं कि एक टेम्पलेट इंस्टेंटेशन में जुड़ाव होना चाहिए।
पेज। कृपया न केवल "thats not allowed because the standard says it's not"
कोई अच्छा कारण नहीं है, और सी ++ 0x इस प्रतिबंध को हटा देगा (लेकिन पीएस में से जुड़ा कोई नहीं; मुझे अभी भी कोई सुराग नहीं है कि इसकी अनुमति क्यों नहीं है)। –
@ माइक; संक्षिप्त एवं सटीक! – BCS