C++类模板的特化
来源:互联网 发布:sql删除嵌套select 编辑:程序博客网 时间:2024/04/27 14:56
C++类模板的特化分为两种,一种是全特化,另一种是偏特化。
下面这个例子就是全特化
#include<iostream>using namespace std;template<class T>class SeqList{public: SeqList(); ~SeqList();private: int _size; int _capacity; T* _data;};template<class T>SeqList<T>::SeqList():_size(0), _capacity(0), _data(new T[_capacity]){ cout << "SeqList<T>" << endl;}template<class T>SeqList<T>::~SeqList(){ delete[] _data;}template<>class SeqList<int>{public: SeqList(int capacity); ~SeqList();private: int _size; int _capacity; int* _data;};//特化后定义成员函数不再需要模板形参SeqList<int>::SeqList(int capacity):_size(0), _capacity(0), _data(new int[_capacity]){ cout << "SeqList<int>" << endl;}SeqList<int>::~SeqList(){ delete[] _data;}void test1(){ SeqList<double>s1; SeqList<int>s2(2);}int main(){ test1(); system("pause"); return 0;}
下面这个例子是偏特化
#include<iostream>using namespace std;template<class T1,class T2>class Data{public: Data();private: T1 _d1; T2 _d2;};template<class T1,class T2>Data<T1, T2>::Data(){ cout << "Data<T1, T2>" << endl;}//偏特化第二个参数template<class T1>class Data<T1,int> {public: Data();private: T1 _d1; int _d2;};template<class T1>Data<T1, int>::Data(){ cout << "Data<T1,int>" << endl;}void test1(){ Data<int, char> s1; Data<int, int> s2;}int main(){ test1(); system("pause"); return 0;}
template<class T1,class T2>class Data{public: Data();private: T1 _d1; T2 _d2;};template<class T1,class T2>Data<T1, T2>::Data(){ cout << "Data<T1, T2>" << endl;}//局部特化两个参数为指针类型template<class T1, class T2>class Data<T1*, T2*>{public: Data();private: T1* _d1; T2* _d2;};template<class T1, class T2>Data<T1*, T2*>::Data(){ cout << "Data<T1*,T2*>" << endl;}void test1(){ Data<int*, char*> d1;}//局部特化两个参数为引用template<class T1, class T2>class Data<T1&, T2&>{public: Data(const T1& d1, const T2& d2);private: const T1& _d1; const T2& _d2;};template<class T1, class T2>Data<T1&, T2&>::Data(const T1& d1, const T2& d2):_d1(d1), _d2(d2){ cout << "Data<T1&,T2&>" << endl;}void test2(){ Data<int&, int&>d3(4,5);}int main(){ test1(); test2(); system("pause"); return 0;}
由上面特化成指针和引用可以看出偏特化并不仅仅是特殊部分参数,而是针对模板参数更进一步的条件限制所设计出的一个特化版本。
由上面的全特化和偏特化可以看出,每次特化前都必须是在已定义的模板基础之上,特化不能单独存在。
0 0
- 【c++】模板的特化
- 【C++】模板类、特化以及偏特化!!!
- 类模板的特化
- 类模板的特化
- 类模板的特化和偏特化
- 类模板的 全特化、偏特化
- 类模板的特化,偏特化
- C++:函数模板、类模板及其特化
- C++类模板的特化
- C++ 类模板的特化
- 类模板的偏特化
- C++类模板的特化
- C++模板的特化
- C++模板的特化
- 模板的特化、偏特化
- 模板的特化与偏特化 ,C++类模板的三种特化
- 类模板的全特化和偏特化
- 模板函数和类的特化以及偏特化
- poj 2418 map的简单使用
- 【编程】【leetcode】303. Range Sum Query
- 设计模式
- 欢迎使用CSDN-markdown编辑器
- caffe深度学习-windows下绘制学习曲线
- C++类模板的特化
- React学习之- (React-JSX-Style)
- LeetCode 8. String to Integer (atoi)
- 1092. To Buy or Not to Buy (20)[字符处理]
- linux awk学习
- |Hdu 2594|KMP|Simpsons’ Hidden Talents
- 组合
- Linux下安装Tomcat7
- access中两字段合字并为新关键字段