规则一:
当函数模板和普通函数一致时,会调用普通函数
#include<iostream>
using namespace std;
template<typename T>
T test1(T a, T b) {
cout << "调用函数模板" << endl;
return a;
}
int test1(int a,int b) {
cout << "调用普通函数" << endl;
return a;
}
int main() {
test1(3, 5);
getchar();
return 0;
}
规则二:
可以通过空模板实参列表的语法限定使用函数模板
#include<iostream>
using namespace std;
template<typename T>
T test1(T a, T b) {
cout << "调用函数模板" << endl;
return a;
}
int test1(int a,int b) {
cout << "调用普通函数" << endl;
return a;
}
int main() {
test1<>(3, 5);
getchar();
return 0;
}
规则三:
如果函数模板可以产生一个更优的匹配就选择函数模板
#include<iostream>
using namespace std;
template<typename T>
T test1(T a, T b) {
cout << "调用函数模板" << endl;
return a;
}
int test1(char a,int b) {
cout << "调用普通函数" << endl;
return a;
}
int main() {
test1(3, 5);
getchar();
return 0;
}
规则四:
函数模板也可以进行重载
#include<iostream>
using namespace std;
template<typename T>
T test1(T a, T b) {
cout << "调用函数模板1" << endl;
return a;
}
template<typename T>
T test1(T a, T b,T c) {
cout << "调用函数模板2" << endl;
return a;
}
//
//int test1(char a,int b) {
// cout << "调用普通函数" << endl;
// return a;
//}
int main() {
test1(3, 5, 9);
getchar();
return 0;
}