模板函数
2016-03-13 16:23
204 查看
模板概念:模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。模板分为模板函数和模板类。
模板函数:如果要比较int/char等类型就都要分别实现一下,相似的代码重复度非常高,而模板函数的实例化一下就解决了这个问题。
函数模板格式:
template <class 形参名1, class 形参名2, class 形参名n>
返回类型 函数名(参数列表)
{}
编译调用模板函数时,编译器会根据传递的参数自动推演出模板形参的类型,并自动生成对应的代码
重载函数模板:调用时优先调用最匹配的那个。
模板分为模板函数和模板类,用模板实现顺序表,单链表,双链表,以及栈和队列。
可关注本人博客后面的博文。
模板函数:如果要比较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。
模板分为模板函数和模板类,用模板实现顺序表,单链表,双链表,以及栈和队列。
可关注本人博客后面的博文。
相关文章推荐
- 设计模式之行为型模式 - 调用行为的传递问题
- [div+css]晒晒最新制作专题推广页模板
- 2008大学生入党申请书 模板
- IMAIL多语言模板两套Outlook&Gmail模板下载
- 在PHP中使用模板的方法
- 深入解析php模板技术原理【一】
- Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
- 在ASP中不用模板生成HTML静态页直接生成.html页面
- C#模板方法模式(Template Method Pattern)实例教程
- JavaScript类继承及实例化的方法
- javascript文本模板用法实例
- 关于Asp代码与页面的分离模板技术第1/3页
- php模板原理讲解
- 需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
- DataGrid 动态添加模板列 实现代码
- 详解java模板和回调机制
- C++模板之特化与偏特化详解
- vs.net2008添加模板方法
- ThinkPHP模板判断输出Empty标签用法详解
- ThinkPHP模板范围判断输出In标签与Range标签用法详解