2012-06-24 16 views
9

मैं एक टेम्पलेट विधि इस प्रकार है: -सरणी प्रकार कटौती

template<typename T, int length> 
void ProcessArray(T array[length]) { ... } 

और फिर मैं कोड उपरोक्त विधि का उपयोग कर: -

int numbers[10] = { ... }; 
ProcessArray<int, 10>(numbers); 

मेरा प्रश्न है मैं क्यों स्पष्ट रूप से टेम्पलेट तर्क निर्दिष्ट करना होगा। इसे स्वत: घटाया नहीं जा सकता है ताकि मैं निम्नानुसार उपयोग कर सकूं: -

ProcessArray(numbers); // without all the explicit type specification ceremony 

मुझे यकीन है कि मुझे कुछ बुनियादी याद आ रहा है! एक हथौड़ा बचाओ!

उत्तर

13

आप मूल्य से सरणी पास नहीं कर सकते हैं। फ़ंक्शन पैरामीटर T array[length]बिल्कुलT* array के रूप में है। कटौती के लिए कोई लंबाई जानकारी उपलब्ध नहीं है।

यदि आप मूल्य से सरणी लेना चाहते हैं, तो आपको std::array जैसी कुछ चाहिए। अन्यथा, आप यह संदर्भ द्वारा ले जा सकते हैं, जो आकार जानकारी खोना नहीं करता:

template<typename T, int length> 
void ProcessArray(T (&array)[length]) { ... } 
6

आप सही तर्क प्रकार छूट रहा है:

template <typename T, unsigned int N> 
void process_array(T (&arr)[N]) 
{ 
    // arr[1] = 9; 
} 

double foo[12]; 
process_array(foo); // fine 
: सरणियों केवल संदर्भ द्वारा पारित किया जा सकता
संबंधित मुद्दे