2012-06-24 26 views
9

Bir şablon yöntemi vardır: -Dizi türü kesinti

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

Sonra kodu yukarıdaki yöntemi kullanarak vardır: - I do neden

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

Benim sorum Şablon argümanlarını açıkça belirtmek zorunda. o olamaz aşağıdaki gibi kullandığım böylece otomatik çıkarılabilir: -

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

Ben temel bir şey eksik eminim! Bir çekiç yedekleyin!

cevap

13

Dizileri değere göre geçiremezsiniz. Bir işlev parametresinde T array[length], , T* array ile tam olarak aynı'dur. Elde edilecek uzunluk bilgisi mevcut değildir.

Diziye göre bir değer almak istiyorsanız, std::array gibi bir şeye ihtiyacınız vardır. Doğru argüman türü kaçırıyorsun

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 
: diziler sadece referans tarafından geçirilebilir Aksi takdirde, boyut bilgisini kaybetmez, hangi referansla alabilir
İlgili konular