2011-04-24 82 views

回答

3

f(a)失敗,因爲一個模板類型參數不能從非類型參數的類型推斷。在這種情況下,編譯器無法推斷出模板參數T的類型。

嘗試調用它作爲f<int>(a);

+1

嗯欠佳。它採取了一些修補(即閱讀),但[有一個很好的方法來做到這一點](http://stackoverflow.com/questions/5771314/no-matching-function-for-call-to-function-template/ 5771415#5771415)。 (_第二個模板參數實際上不應該是T_類型的) – sehe 2011-04-24 15:32:44

+0

爲什麼downvote?問的問題是爲什麼'f(a)'失敗,我的帖子設法回答這個問題。 – 2011-04-24 15:35:19

3

試試這個:

template<class T, T i> void f(T[10][i]) { }; // note the 'T' 

int main() { 
    int a[10][30]; 
    f(a); 
} 

..這使編譯器來推斷的T的類型,這是完全不可能的樣品(因爲T不是在使用所有)。

http://ideone.com/gyQqI