2011-04-24 98 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