C++如果两个模板函数都与参数列表匹配,将调用哪个模板

C++ which template would be call if both template function match the argument list

本文关键字:列表 调用 参数 函数 如果 两个 C++      更新时间:2023-10-16
template<class T>
void fn(T t){}
template<class T>
void fn(std::vector<T> vt){}
void f() {
std::vector<int> vt;
fn(vt);
}

我知道会调用第二个模板函数,但我不知道模板函数匹配的规则。

部分排序发生在调用函数模板专用化的重载解析中。

非正式地说,"A 比 B 更专业"意味着"A 接受的类型比 B 少"。

对于这种情况,第 2fn更专业,并且在重载解析方面胜出,因为它

接受的std::vector实例化类型少于第 1 个实例化类型,而第 1 个实例化可以接受所有类型。