#include <iostream>
#include <string>
using namespace std;
template<typename T>
void myPrint(T a, T b){
cout << "函数模板的调用" << endl;
}
void myPrint(int a, int b){
cout << "普通函数调用" << endl;
}
template<typename T>
void myPrint(T a, T b, T c){
cout << "函数模板的调用cccccccc" << endl;
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
// 1.函数模板和普通函数都可以调用时,优先执行普通函数
// myPrint(a,b);
// 2.如果就想调用函数模板,可以使用空模板参数列表
// myPrint<>(a,b);
// 3.函数模板可以重载
// myPrint(a,b,c);
// 4.如果模板可以产生更好的匹配,就会优先执行函数模板
char d = 'd';
char f = 'f';
myPrint(d, f);
return 0;
}
函数模板和普通函数在一起调用规则
- c++编译器优先考虑普通函数
- 可以通过空模板实参列表的语法限定编译器只能通过模板匹配
- 函数模板可以像普通函数那样可以被重载
- 如果函数模板可以产生一个更好的匹配,那么选择模板