template<class T, T i> void f(int[10][i]) { };
int main() {
int a[10][30];
f(a);
}
为什么f(a)
会失败?
答案 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
)。
答案 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?