C++中,如果两个模板函数都符合参数列表,会调用哪个模板?

问题描述 投票:3回答:1
template<class T>
void fn(T t){}

template<class T>
void fn(std::vector<T> vt){}

void f() {
std::vector<int> vt;
fn(vt);
}

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

c++ templates overload-resolution template-argument-deduction partial-ordering
1个回答
2
投票

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

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

对于这种情况,第2 fn 更加专业化,并且在过载解决中胜出,因为它接受的是 std::vector 比第1种少,它可以接受所有类型。

© www.soinside.com 2019 - 2024. All rights reserved.