如果两个模板函数都匹配参数列表,C++ 将调用哪个模板
C++ which template would be call if both template function match the argument list
template<class T>
void fn(T t){}
template<class T>
void fn(std::vector<T> vt){}
void f() {
std::vector<int> vt;
fn(vt);
}
知道会调用第二个模板函数,不知道模板函数匹配规则
Partial ordering 发生在调用函数模板特化的重载决策中。
Informally "A is more specialized than B" means "A accepts fewer types than B".
对于这种情况,第二个 fn
更专业并且在重载决策中获胜,因为它接受 std::vector
的实例化类型少于第一个,它可以接受所有类型。
template<class T>
void fn(T t){}
template<class T>
void fn(std::vector<T> vt){}
void f() {
std::vector<int> vt;
fn(vt);
}
知道会调用第二个模板函数,不知道模板函数匹配规则
Partial ordering 发生在调用函数模板特化的重载决策中。
Informally "A is more specialized than B" means "A accepts fewer types than B".
对于这种情况,第二个 fn
更专业并且在重载决策中获胜,因为它接受 std::vector
的实例化类型少于第一个,它可以接受所有类型。