#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
void func(int a, int b)
{
cout << "调用普通函数" << endl;
}
template <class T>
void func(T a, T b)
{
cout << "调用模板" << endl;
}
//函数模板和普通函数都可以实现,优先调用普通函数
//可以通过空模板参数列表来强制调用模板函数
//函数模板可以发生重载
//如果函数模板可以产生更好匹配,优先调用模板函数
//函数模板
template<typename T>
void Myswap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
void test01()
{
int a = 10;
int b = 20;
//自动类型推导
Myswap(a, b);
cout << "a = " << a << " b = " << b << endl;
//显示指定类型
Myswap<int>(a, b);
cout << "a = " << a << " b = " << b << endl;
}
void test02()
{
//函数模板和普通函数都可以实现,优先调用普通函数
func(100, 100);
}
void test03()
{
//可以通过空模板参数列表来强制调用模板函数
func<>(100, 100);
}
//函数模板可以发生重载
template<class T>
void func(T a, T b, T c)
{
cout << "调用重载模板" << endl;
}
void test04()
{
func(1, 2, 3);
}
//如果函数模板可以产生更好匹配,优先调用模板函数
void test05()
{
func('a', 'v');
}
int main()
{
//test01();
//test02();
//test03();
//test04();
test05();
return 0;
}