调用模板函数时,可以省略函数名后面的类型吗?
例如,考虑函数
模板
<typename T
&GT; void f(T var){...};
可以简单地这样称呼它:
int x = 5;
F(X);
或我 包含类型?
int x = 5;
˚F<int
&GT;(X);
答案 0 :(得分:17)
每当编译器可以从函数参数中推断模板参数时,可以将它们遗漏掉。这也是一种很好的做法,因为它可以使您的代码更易于阅读。
此外,您只能保留结尾的模板参数,而不是开头或中间:
template<typename T, typename U> void f(T t) {}
template<typename T, typename U> void g(U u) {}
int main() {
f<int>(5); // NOT LEGAL
f<int, int>(5); // LEGAL
g<int>(5); // LEGAL
g<int, int>(5); // LEGAL
return 0;
}
答案 1 :(得分:10)
使用隐式模板参数调用它没有任何问题。编译器会告诉您是否混淆,在这种情况下,您可能必须明确定义模板参数才能调用该函数。