2017-02-15 8 views
7

मुझे अधिकतम खोजने का कार्य है और मैं संदर्भ के माध्यम से स्थिर सरणी भेजना चाहता हूं, यह क्यों संभव नहीं है?एक टेम्पलेट फ़ंक्शन के संदर्भ में पास

template <class T> 
T findMax(const T &arr, int size){...} 

int main{ 
    int arr[] = {1,2,3,4,5}; 
    findMax(arr, 5); // I cannot send it this way, why? 
    return 0; 
} 
+2

कृपया 'int main() '(नोटिस' int' और '()') –

+1

का उपयोग केवल स्पष्टीकरण के लिए था, मैं int के बारे में सहमत हूं (मैं इसे संपादित करूंगा, धन्यवाद)। – Lea

उत्तर

7

सही वाक्यविन्यास का उपयोग करें। करने के लिए हस्ताक्षर बदलें:

template <class T, size_t size> 
T findMax(const T (&arr)[size]){...} 

या आप findMax() समारोह के लिए std::array तर्क का उपयोग कर सकते हैं।

Live Example

क्यों यह संभव नहीं है?

const T &arr: यहाँ arr प्रकार T के संदर्भ और नहीं प्रकार T के रूप में आप सोच सकते हैं की सरणी के संदर्भ में है। तो आपको arr के बाद [..] की आवश्यकता है। लेकिन फिर यह एक सूचक को क्षय हो जाएगा। यहां आप () के साथ बाध्यकारी बदल सकते हैं और const T (&arr)[SIZE] का उपयोग कर सकते हैं।

अधिक के लिए, आप const T &arr[N] v/s const T (&arr)[N] के बीच अंतर का पता लगाने की कोशिश कर सकते हैं।

+1

क्या आप विस्तारित कर सकते हैं कि आपने क्या किया ?, यह वाक्यविन्यास क्या मानक है? और यह किसी भी प्रकार की सरणी पर काम करेगा? – Lea

+0

मुझे उम्मीद है कि यह संपादन के बाद स्पष्ट है। मुझे उम्मीद है इससे आपको मदद मिली होगी। –

+0

'टी एंड एआर [एन] 'संदर्भों की एक सरणी है [जो अवैध है] (http://stackoverflow.com/questions/5460562/why-it-is-impossible-to-create-an-array-of-references -इन-सी), लेकिन 'टी (और एआर) [एन]' 'टी' सरणी का संदर्भ है जो पूरी तरह से मान्य है। –

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