#include <iostream>
using namespace std;
template <typename T, typename Q, typename H>
void func(T t, Q q, H h)
{
cout << 1 << endl;
}
template <typename T, typename Q>
void func(T t, T t2, Q q)
{
cout << 2 << endl;
}
template <>
void func(int a, int b, double c)
{
cout << 3 << endl;
}
int main()
{
func(1, 1, 1.0);
}
上面这段输出为3,也就是说匹配到的是第3个具体化的void func(int a, int b, double c)
如果我把后2个具体化的模板函数位置对调一下:
#include <iostream>
using namespace std;
template <typename T, typename Q, typename H>
void func(T t, Q q, H h)
{
cout << 1 << endl;
}
template <>
void func(int a, int b, double c)
{
cout << 3 << endl;
}
template <typename T, typename Q>
void func(T t, T t2, Q q)
{
cout << 2 << endl;
}
int main()
{
func(1, 1, 1.0);
}
这样输出就变成2了,匹配到的模板函数是void func(T t, T t2, Q q)
没有想明白为什么2个具体化的函数的先后顺序会影响到匹配结果呢?