模板的特化
来源:互联网 发布:部落冲突x连弩升级数据 编辑:程序博客网 时间:2024/06/11 00:54
提起模板,那我们有必要先了解一下泛型编程。
泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段。模板是泛型编程的基础。
模板又分为:类模板和函数模板。
首先看类模板的特化:
类模板的特化分为:全特化和部分特化。下面举例说明:
#include<iostream>using namespace std;template <typename T1,typename T2>class Data{public:Data(){ cout << "Data(T1,T2)" << endl;}private:T1 t1;T2 t2;};template <>//全特化class Data<int, double >{public:Data(){ cout<<" Data(int, double)" << endl;}private:int d1;double d2;};template <typename T>//部分特化class Data<T, int >{public:Data(){cout << "Data(T,int)" << endl;}private:T t1;int d1;};int main(){Data<int, double> d1;//全特化Data<char, int> d2;//部分特化Data<int, double> d3;//类模板Data<int, char> d4;//类模板return 0;}
运行结果如下图:
接下来关于函数模板的特化:
对于函数模板,却只有全特化,不能偏特化
模板函数特化形式如下:
1、关键字template后面接一对空的尖括号<>
2、再接模板名和一对尖括号,尖括号中指定这个特化定义的模板形参
3、函数形参表
4、函数体
举例如下:
template <typename T>//模板函数int Compare(T t1, T t2){if (t1 < t2)return 1;if (t1 >t2)return -1;return 0;}template <>//全特化int Compare<const char *>(const char * p1, const char * p2){return strcmp(p1, p2);}int main(){const char *str1 = "1234";const char *str2 = "abcd";char *str3 = "1234";char *str4 = "abcd";cout << Compare(str1, str2) << endl;//全特化cout << Compare(str3, str4) << endl;//模板函数return 0;}
注意:在模板特化版本的调用中,实参类型必须与特化版本函数的形参类型完全匹配,如果不匹配,编 译器将为实参模板定义中实例化一个实例。
本文出自 “10912110” 博客,请务必保留此出处http://10922110.blog.51cto.com/10912110/1765533
0 0
- 模板的特化、偏特化
- C++模板的特化
- 【c++】模板的特化
- 模板的偏特化
- 函数模板的特化
- C++模板的特化
- 模板的特化
- C++模板的特化
- C++模板的特化
- 类模板的特化
- 模板函数的特化
- 模板的偏特化
- 函数模板的特化
- 函数模板的特化
- 函数模板的特化
- 模板的特化
- 类模板的特化
- c++模板的特化
- 判断2000年---2500年之间的闰年
- 折半查找算法的实现
- C语言趣味编程两小例
- 用C语言实现简单的三子棋小游戏
- 关于继承与派生的小结
- 模板的特化
- 推荐系统_基于内容的推荐
- 关于多态的小结
- 下载谷歌浏览器(Chrome)扩展离线安装包crx文件最简单的方法
- 证书过期:The certificate used to sign "###"...
- [Android]libpng error: Not a PNG file错误解决
- SDK使用心得
- “Red and Black(红黑瓷砖),ZOJ2165”的一种解法
- C# 枚举绑定到ComboBox