2013-03-12 18 views
83

मैं निम्न कार्य करने की अनुमति है?खाका डिफ़ॉल्ट तर्क

Foo me; 

लेकिन मैं निम्नलिखित उल्लेख करना होगा:

Foo<int> me; 

सी ++ 11 शुरू की डिफ़ॉल्ट टेम्पलेट तर्क और अभी वे मेरा पूरा समझने के लिए मायावी जा रहा है।

+2

काफी पुराने सवाल करते हैं, लेकिन गूगल मुझे यहाँ लाया ... के लिए कुछ (जैसे मुझे) सी ++ 11 और प्री -11 के बीच भेद काफी महत्वपूर्ण है। मेरे ज्ञान के लिए डिफ़ॉल्ट टेम्पलेट तर्क पहले से ही C++ 11 से पहले मौजूद थे। – user463035818

उत्तर

105

आप क्या करना है:

Foo<> me; 

टेम्पलेट तर्क मौजूद होना चाहिए लेकिन आप उन्हें खाली छोड़ सकते हैं।

इसे एक डिफ़ॉल्ट तर्क के साथ foo फ़ंक्शन की तरह सोचें। अभिव्यक्ति foo इसे कॉल नहीं करेगा, लेकिन foo() होगा। तर्क वाक्यविन्यास अभी भी वहां होना चाहिए। यह इसके साथ संगत है।

+12

मैंने हमेशा सोचा है कि '<>' आवश्यक क्यों था। कोई उपाय? – Pubby

+4

@ पब्बी मुझे लगता है कि यह कुछ अनावश्यक जटिलताओं का निर्माण करेगा यदि 'Foo' * हो सकता है * टेम्पलेट पहचानकर्ता हो या * एक डिफ़ॉल्ट तर्क हो सकता है या नहीं, यह एक स्पष्ट तत्कालता हो सकता है। स्पष्ट तात्कालिकता वाक्यविन्यास को बेहतर रखें। इसके बारे में एक फ़ंक्शन 'foo' की तरह एक डिफ़ॉल्ट पैरामीटर के साथ सोचें। आप इसे 'foo'' नहीं कह सकते हैं, आप इसे 'foo() 'के साथ कॉल करते हैं। यह संगत रखने के लिए समझ में आता है। –

+14

दूसरी तरफ, 'foo <>() '* * को संक्षिप्त रूप से' foo()' ... – aschepler

16

आप निम्न का उपयोग कर सकते हैं:

Foo<> me; 

और int अपने टेम्पलेट तर्क है। कोणीय ब्रैकेट आवश्यक हैं और छोड़े नहीं जा सकते हैं।

+0

समझ में आता है और धन्यवाद, लेकिन जैसा कि नीचे बताया गया है, टाइप प्रकार निर्दिष्ट क्यों मौजूद है? – user633658

+0

@ user633658: क्या आपका मतलब "टाइप विनिर्देशक" था?मुझे यकीन नहीं है कि मैं –

+0

समझता हूं वैसे भी, खाली कोणीय ब्रैकेट की आवश्यकता के कारण के कारण, मैं केवल अनुमान लगा सकता हूं, और वे अकेले टेम्पलेट के नाम के उपयोग के साथ संभावित अस्पष्टताओं को सत्तारूढ़ करने के बारे में हैं, लेकिन मुझे करना है कबूल करें कि मुझे सटीक कारण नहीं पता –

15

आप ऐसा करने की अनुमति नहीं है, लेकिन आप इस

typedef Foo<> Fooo; 

कर सकते हैं और फिर पहले से ही

Fooo me; 
+0

इसमें डिफ़ॉल्ट प्रकार के साथ कोई अंतर है और: 'typedef Foo Fooo;', डिफ़ॉल्ट प्रकार के बिना? – qrikko

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