1、如果函数模板和普通函数都可以实现,优先调用普通函数
#include <iostream>
#include<string>
using namespace std;
void myPrint(int a, int b)
{
cout << "调用的普通函数" << endl;
}
//函数模板
template<typename T>
void myPrint(T a,T b)
{
cout << "调用的函数模板" << endl;
}
template<typename T>
void myPrint(T a, T b, T c)
{
cout<< "调用重载的函数模板" << endl;
}
void test01()
{
int a = 10;
int b = 20;
myPrint(a, b);
//1、如果函数模板和普通函数都可以实现,优先调用普通函数
//注意如果告诉编译器 普通函数是有的,但只是声明没有实现,或者不在当前文件内实现,就会报错找不
}
int main()
{
test01();
}
2、可以通过空模板参数列表来强制调用函数模板
#include <iostream>
#include<string>
using namespace std;
void myPrint(int a, int b)
{
cout << "调用的普通函数" << endl;
}
//函数模板
template<typename T>
void myPrint(T a,T b)
{
cout << "调用的函数模板" << endl;
}
template<typename T>
void myPrint(T a, T b, T c)
{
cout<< "调用重载的函数模板" << endl;
}
void test01()
{
int a = 10;
int b = 20;
//myPrint(a, b);
//1、如果函数模板和普通函数都可以实现,优先调用普通函数
//注意如果告诉编译器 普通函数是有的,但只是声明没有实现,或者不在当前文件内实现,就会报错找不
myPrint<>(a, b);
}
int main()
{
test01();
}
//3、函数模板也可以发生重载
#include <iostream>
#include<string>
using namespace std;
void myPrint(int a, int b)
{
cout << "调用的普通函数" << endl;
}
//函数模板
template<typename T>
void myPrint(T a,T b)
{
cout << "调用的函数模板" << endl;
}
template<typename T>
void myPrint(T a, T b, T c)
{
cout<< "调用重载的函数模板" << endl;
}
void test01()
{
int a = 10;
int b = 20;
//3、函数模板也可以发生重载
int c = 30;
myPrint(a, b, c); //调用重载的函数模板
}
int main()
{
test01();
}
//4、如果函数模板可以产 生更好的匹配,优先调用函数模板
#include <iostream>
#include<string>
using namespace std;
void myPrint(int a, int b)
{
cout << "调用的普通函数" << endl;
}
//函数模板
template<typename T>
void myPrint(T a,T b)
{
cout << "调用的函数模板" << endl;
}
template<typename T>
void myPrint(T a, T b, T c)
{
cout<< "调用重载的函数模板" << endl;
}
void test01()
{
int a = 10;
int b = 20;
char c1 = 'a';
char c2 = 'b';
myPrint(c1, c2);//调用函数模板,该代码的普通函数需隐式转换,相对于函数模板更麻烦c++会自动
//调用函数模板
}
int main()
{
test01();
}