c++之模板--函数模板

模板

c++之模板--函数模板_第1张图片
函数模板与普通函数的区别
1、函数模板不允许自动类型转化
2、普通函数能够自动进行类型转化

//函数模板
template<class T>
T MyPlus(T a, T b){
	T ret = a + b;
	return ret;
}

//普通函数
int MyPlus(int a,char b){
	int ret = a + b;
	return ret;
}

void test02(){

	int a = 10;
	char b = 'a';

	//调用函数模板,严格匹配类型
	MyPlus(a, a);
	MyPlus(b, b);
	//调用普通函数
	MyPlus(a, b);
	//调用普通函数  普通函数可以隐式类型转换
	MyPlus(b, a);

函数模板与普通函数一起的调用规则

1、普通函数》特化模板函数 》函数模板

#include
using namespace std;
class P
{
	
};

//void print(int n)
//{
//		cout <<"call int" <
//}

void print(double d)
{
		cout <<"call double" <<endl;
}


void print(P p)
{
		cout <<"call calsss" <<endl;
}

template <typename T>
void print(T t)
{
	cout <<"call templeta" <<endl;
}

template<> // 特化模板函数
void print(int n)
{
	cout <<"call template in function" <<endl;
} 
 
 
template <class T,class U>
T add(T a, U b)
{
	cout <<"a+b=" << a+b <<endl;
	return a+b;
}


//函数匹配优先级  普通函数》特化模板函数》模板函数 
int main()
{
	print(1); 
	print(2.0);
	P p;
	print(p);
	add(1,2.1);
	add(2.1,1);
	return 0;
}  

c++之模板--函数模板_第2张图片

//class 和 typename都是一样的,用哪个都可以
template<class T>
void MySwap(T& a,T& b){
	T temp = a;
	a = b;
	b = temp;
}

void test01(){
	
	int a = 10;
	int b = 20;
	cout << "a:" << a << " b:" << b << endl;
	//1. 这里有个需要注意点,函数模板可以自动推导参数的类型
	MySwap(a,b);
	cout << "a:" << a << " b:" << b << endl;

你可能感兴趣的:(C++,c++,visual,studio,开发语言)