调用模板函数时可以省略函数名后的类型吗?
例如,考虑以下函数:
template<typename T>
void f(T var){...}
可以简单地这样调用它吗:
int x = 5;
f(x);
或者我必须包含类型吗?
int x = 5;
f<int>(x);
最佳答案
只要编译器可以从函数参数中推断出模板参数,就可以将它们排除在外。这也是一种很好的做法,因为它会使您的代码更易于阅读。
此外,您只能保留末尾的模板参数,不能保留开头或中间:
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;
}
关于c++ - 在 C++ 模板中省略参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1146048/