您的位置:首页 > 其它

模板函数

2016-03-13 16:23 204 查看
模板概念:模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。模板分为模板函数和模板类。
模板函数:如果要比较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。
模板分为模板函数和模板类,用模板实现顺序表,单链表,双链表,以及栈和队列。
可关注本人博客后面的博文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息