没有匹配的函数来调用函数模板
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);
}
Why does f(a)
fail?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
f(a)
失败,因为无法从非类型参数的类型推导出模板类型参数。在这种情况下,编译器无法推断模板参数T
的类型。尝试将其称为
f(a);
f(a)
fails because a template type argument cannot be deduced from the type of a non-type argument. In this case the compiler cannot deduce the type of the template parameterT
.Try calling it as
f<int>(a);
试试这个:
..这使得编译器能够推断出
T
的类型,这在您的示例中是完全不可能的(因为根本没有使用T
)。http://ideone.com/gyQqI
Try this:
.. this enables the compiler to deduce the type of
T
, which is totally impossible in your sample (becauseT
is not used at all).http://ideone.com/gyQqI
这个有效(http://codepad.org/iXeqanLJ)
有用的背景工具:重载解析和数组:应该调用哪个函数?
This one works (http://codepad.org/iXeqanLJ)
Useful backgrounder: Overload resolution and arrays: which function should be called?