2015-04-29 4 views
23

क्या किसी अन्य फ़ंक्शन के लिए ऑटो को पास करने का कोई तरीका है?क्या सी ++ में तर्क के रूप में ऑटो पास करने का कोई तरीका है?

int function(auto data) 
{ 
    //DOES something 
} 
+3

इस बात पर निर्भर करता है कि आप क्या करने में सक्षम हैं। आपको फ़ंक्शन टेम्पलेट की पेशकश करने की क्या आवश्यकता नहीं है? – Quentin

+0

यह एक भयानक विचार है। तर्क प्रकार न केवल आपके लिए है, बल्कि दूसरों के लिए यह जानने के लिए कि आपका कार्य किस प्रकार चाहता है। बस 3 सेकंड लें और टाइप लिखें, आलसी मत बनें (या टाइप को ठीक नहीं किया गया है तो टेम्पलेट का उपयोग करें)। – Synxis

+0

हाँ, सी ++ 1z अवधारणाओं के साथ, आप यह कर सकते हैं :) – Navin

उत्तर

32

तुम्हारा मतलब है कि यह है कि आप पास कर सकते हैं चाहते हैं फ़ंक्शन में कोई भी प्रकार, इसे एक टेम्पलेट बनाएं:

template <typename T> int function(T data); 

आपके द्वारा उपयोग किए गए वाक्यविन्यास को अनुमति देने के लिए सी ++ 17 के लिए एक प्रस्ताव है (जैसा कि सी ++ 14 जेनेरिक लैम्बडास के लिए पहले से ही करता है), लेकिन यह अभी तक मानक नहीं है।

+1

मुझे आश्चर्य है: क्या यह वही बात है? यही है, प्रत्येक 'टी' के लिए 'फंक्शन ' होगा, जबकि 'ऑटो' के लिए केवल एक ही होगा, क्योंकि इसकी कटौती में बदलाव आएगा। या शायद मैं गलत हूँ? – edmz

+3

@black: यह वही चीज़ लिखने का एक छोटा सा तरीका है। 'ऑटो' के लिए प्रत्येक पैरामीटर प्रकार के लिए एक अलग फ़ंक्शन तत्काल किया जाएगा, जैसा कि यह नामित टेम्पलेट पैरामीटर के लिए होगा। –

+1

मैंने सोचा कि निहित टेम्पलेट मानकों को अवधारणाओं से बाधित किया जाना चाहिए ... अब अवधारणाएं पूरी तरह से मर चुकी हैं, या 'ऑटो' अनियंत्रित तर्कों के लिए उपयोग की जाती है और (किसी दिन) अवधारणाओं के लिए अवधारणाओं का उपयोग किया जाता है? –

17

टेम्पलेट्स जिस तरह से आप सामान्य कार्यों के साथ ऐसा कर रहे हैं:

template <typename T> 
int function(T data) 
{ 
    //DOES something 
} 

वैकल्पिक रूप से, आप एक लैम्ब्डा इस्तेमाल कर सकते हैं:

auto function = [] (auto data) { /*DOES something*/ }; 
+0

क्या यह मान्य सी ++ 11 है? वह सी ++ 14 सही है? – Alex

+0

जेनेरिक लैम्बडास एक सी ++ 14 फीचर हैं। – TartanLlama

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

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