在C++模板中省略参数

Chr*_*ris 6 c++ templates

调用模板函数时,可以省略函数名后面的类型吗?

例如,考虑一下这个功能

template <typename T> void f(T var){...};

可以这样简单地调用它:

int x = 5;
F(X);

或者我必须包括类型?

int x = 5;
f <int>(x);

Zif*_*fre 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;
}
Run Code Online (Sandbox Code Playgroud)


Deu*_*uro 10

使用隐式模板参数调用它没有任何问题.编译器会告诉您它是否混淆,在这种情况下,您可能必须显式定义模板参数以调用该函数.