2016-03-02 18 views
7

क्या यह कानूनी सी ++ है?क्या टेम्पलेट टेम्पलेट पैरामीटर का पैरामीटर छायांकन कर सकता है?

template <typename T, template <typename T> class> 
struct S { }; 

बजना (3.7.1) यह खारिज कर दिया, दूसरे T छाया पहले T शिकायत। जीसीसी को इसके बारे में परवाह नहीं है और मुझे लगता है कि यह उचित है। मुझे लगता है कि यह केवल पैरामीटर टेम्पलेट पैरामीटर में महत्वपूर्ण पैरामीटर की संख्या है।

+0

कारण है कि आप 'T' दो बार उपयोग करने के लिए की जरूरत है? आप 'T' दूसरा टेम्पलेट में उपयोग करना चाहते हैं यदि आप' टेम्पलेट <वर्ग टी, टेम्पलेट वर्ग> 'लिख सकते हैं –

+1

जब पहले पैरामीटर दूसरा पैरामीटर के लिए दिया जा माना जाता है जो एक है @DavidHaim यह अनिवार्य नहीं है, लेकिन टेम्पलेट टेम्पलेट, नेस्टेड टेम्पलेट पैरामीटर के लिए समान (या, कम से कम एक समान) नाम का उपयोग करना समझ में आता है। आपका सुझाव दिलचस्प है, मैंने कभी टेम्पलेट टेम्पलेट पैरामीटर में डिफ़ॉल्ट पैरामीटर निर्दिष्ट करने का प्रयास नहीं किया है। 'टेम्पलेट <कक्षा टी, टेम्पलेट कक्षा> 'की तुलना में यह क्या हासिल करता है? – nodakai

+0

मुझे आश्चर्य है कि उन लोगों के लिए ड्राइविंग प्रेरणा क्या है जो पोस्ट शीर्षक में टैग शब्दों के खिलाफ खोज और नष्ट करते हैं ?? क्या वे शायद 'नूल' से 'नप्पटर' को बदलने में उतने ही उत्साही हैं? – nodakai

उत्तर

7

सं [temp.local]/6:

एक टेम्पलेट पैरामीटर इसके दायरे (नेस्टेड स्कोप सहित) के भीतर redeclared नहीं किया जाएगा।

+0

हम्म, मुझे यह समझने में थोड़ी देर लग गई कि आपका उद्धरण वास्तव में मेरे मामले के लिए प्रासंगिक है, लेकिन सही है, यह निश्चित रूप से "नेस्टेड स्कोप" के बारे में है। – nodakai

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