模板函数

模板概念:模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。模板分为模板函数和模板类。

模板函数:如果要比较int/char等类型就都要分别实现一下,相似的代码重复度非常高,而模板函数的实例化一下就解决了这个问题。

函数模板格式:

template <class 形参名1, class 形参名2, class 形参名n>

返回类型 函数名(参数列表)

{}

编译调用模板函数时,编译器会根据传递的参数自动推演出模板形参的类型,并自动生成对应的代码

template<class T>
bool IsEqual(const T& left, const T& right)
{
	return left == right;
}
void Test1()
{
	string s1("s1"), s2("s2");
	cout << IsEqual(s1, s2) << endl;
	cout << IsEqual(1, 1) << endl;
	//cout << IsEqual(1, 1.2) << endl;模板参数不匹配,可通过实例化对象解决
	cout << IsEqual<double>(1, 1.2) << endl;
}

模板形参的定义既可以使用class,也可以使用typename,含义是相同的

重载函数模板:调用时优先调用最匹配的那个。

bool IsEqual(const int& left, const int& right)//函数1
{
	cout << "bool IsEqual(const int& left, const int& right)" << endl;
	return left == right;
}

template<typename T>
bool IsEqual(const T& left, const T& right)//函数2
{
	cout << "template<typedef T>" << endl;
	return left == right;
}

template<typename T1, typename T2>
bool IsEqual(const T1& left, const T2& right)//函数3
{
	cout << "template<typedef T1,typedef T2>" << endl;
	return left == right;
}
void Test2()
{
	cout << IsEqual(1, 1) << endl;
	cout << IsEqual<int>(1, 1) << endl;
	cout << IsEqual(1, 1.2) << endl;
}

上述三个分别调用了函数1,2和3。

模板分为模板函数和模板类,用模板实现顺序表,单链表,双链表,以及栈和队列。

可关注本人博客后面的博文。

你可能感兴趣的:(模板,实例化,模板函数)