2013-05-17 25 views
10

अगर मैं एक टेम्पलेट वर्ग है:एक सी ++ टेम्पलेट वर्ग में, क्या मैं उसी नाम का उपयोग कर टेम्पलेट पैरामीटर टाइप कर सकता हूं?

template<typename Layout> 
class LayoutHandler : Handler { 
}; 

और मैं कक्षा के उपयोगकर्ता के लिए पैरामीटर लेआउट को बेनकाब करना चाहते हैं। तब:

template<typename Layout> 
class LayoutHandler : Handler { 
public: 
    typedef Layout Layout; // using the same name 
}; 

VS2012 इस कोड संकलन, और अपेक्षित परिणाम दे सकते हैं। (मैं इसे जांचने के लिए std :: is_same का उपयोग करता हूं।) क्या यह मानक C++ 03 या C++ 11 में अनुमत है?

+3

मुझे लगता है कि चाहते हैं इसकी अनुमति है लेकिन हतोत्साहित होता है कि हालांकि (सिर्फ अच्छा लग रहा है नहीं है)। मैं एसएच पसंद करेंगे 'टाइपिफ़ लेआउट लेआउट टाइप' की तरह, केवल पठनीयता के लिए। –

+0

व्यक्तिगत रूप से मैं एक चीज़ के लिए केवल एक ही नाम का उपयोग करना पसंद करता हूं। रचनाकारों में मैं कुछ भी लिखता हूं जैसे टी :: टी (इंट ए): ए (ए) {} – jingyu9575

+0

उसी नाम से 'टाइपपीफ' का उद्देश्य क्या है? मैं इसे काफी नहीं मिला। –

उत्तर

4

यह अनुमति नहीं है सी ++ 11:

की 'typedef लेआउट LayoutHandler :: लेआउट' त्रुटि घोषणा।

typedef एक घोषणा है। (धारा 7.1.3 देखें)

template पैरामीटर को इसके दायरे (नेस्टेड स्कॉप्स समेत) के भीतर फिर से नहीं देखा जा सकता है। (खंड 14.6.1.6 देख)

C++11 draft standard n3242

1

सी +11 तक नहीं, आप इसका उपयोग नहीं कर सकते हैं, यह आपको एक त्रुटि देता है। छाया टेम्पलेट parm 'वर्ग लेआउट'

+1

तो क्या मानक सी ++ 11 इसे अनुमति देता है? – jingyu9575

+0

"तक सी ++ 11 तक आप इसका उपयोग नहीं कर सकते" मुझे नहीं लगता कि यह सी ++ 11 के लिए काम करता है (कम से कम मेरे लिए)। – edmz

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

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