模板函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板函数相关的知识,希望对你有一定的参考价值。
模板概念:模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。模板分为模板函数和模板类。
模板函数:如果要比较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。
模板分为模板函数和模板类,用模板实现顺序表,单链表,双链表,以及栈和队列。
可关注本人博客后面的博文。
本文出自 “Materfer” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1750553
以上是关于模板函数的主要内容,如果未能解决你的问题,请参考以下文章