调用函数模板没有匹配函数

时间:2011-04-24 15:10:24

标签: c++ templates

template<class T, T i> void f(int[10][i]) { };

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

为什么f(a)会失败?

http://ideone.com/Rkc1Z

3 个答案:

答案 0 :(得分:3)

f(a)失败,因为无法从非类型参数的类型推导出模板类型参数。在这种情况下,编译器无法推断出模板参数T的类型。

尝试将其称为f<int>(a);

答案 1 :(得分: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

答案 2 :(得分:1)

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?