template<class T, T i> void f(int[10][i]) { };
int main() {
int a[10][30];
f(a);
}
爲什麼f(a)
失敗?呼叫功能模板沒有匹配功能
template<class T, T i> void f(int[10][i]) { };
int main() {
int a[10][30];
f(a);
}
爲什麼f(a)
失敗?呼叫功能模板沒有匹配功能
f(a)
失敗,因爲一個模板類型參數不能從非類型參數的類型推斷。在這種情況下,編譯器無法推斷出模板參數T
的類型。
嘗試調用它作爲f<int>(a);
試試這個:
template<class T, T i> void f(T[10][i]) { }; // note the 'T'
int main() {
int a[10][30];
f(a);
}
..這使編譯器來推斷的T
的類型,這是完全不可能的樣品(因爲T
不是在使用所有)。
template< std::size_t N > void f(int (&arr)[10][N])
{
}
int main() {
int a[10][30];
f(a);
}
這一個工程(http://codepad.org/iXeqanLJ)
有用的背景資料:Overload resolution and arrays: which function should be called?
嗯欠佳。它採取了一些修補(即閱讀),但[有一個很好的方法來做到這一點](http://stackoverflow.com/questions/5771314/no-matching-function-for-call-to-function-template/ 5771415#5771415)。 (_第二個模板參數實際上不應該是T_類型的) – sehe 2011-04-24 15:32:44
爲什麼downvote?問的問題是爲什麼'f(a)'失敗,我的帖子設法回答這個問題。 – 2011-04-24 15:35:19