类模板的特化
来源:互联网 发布:淘宝详情页装修教程 编辑:程序博客网 时间:2024/04/27 19:24
类模板的特化
(2)特化的类模板
2 类模板的半特化
所谓半特化就是部分参数特化的模板。典型的如vector的bool类型时,调用的是半特化模板类。
1 类模板的特化
指定具体的匹配类型,简单如下所示(1)普通的类模板定义如下
template<class T>class Test{public: ....private: ....}
(2)特化的类模板
template<> //这里<>中间是空的class Test<int> //跟在类名后的<>里指定具体的类型{public: ....private: ....}
2 类模板的半特化
所谓半特化就是部分参数特化的模板。典型的如vector的bool类型时,调用的是半特化模板类。
template<class _Alloc> //0. <>非空,且指定_Alloc是泛化的类型 class vector<_Bool, _Alloc> //1. <>非空,指定当第一个参数是BOOL类型时,直接对应该模板在template关键字后面和class关键字后面的尖括号里都是非空的参数列表。
3 如果都能匹配时,应该选择“特化程度最高”的模板
#include <iostream>using namespace std;template <class T, class U>class C{public:void f(){cout<<"Primary Template"<<endl; }};template <class U>class C<int, U>{public:void f(){cout<<"int"<<endl;}};template <class T>class C<T, double>{public:void f(){cout<<"double"<<endl;}};template <class T, class U>class C<T*, U>{public:void f(){cout<<"T* is used"<<endl;}};template <class T, class U>class C<T, U*>{public:void f(){cout<<"U* is used"<<endl;}};template<class T, class U>class C<T*, U*>{public:void f(){cout<<"T* and U* is used"<<endl;}};template<class T>class C<T, T>{public:void f(){cout<<"T = U is used"<<endl;}};int main(){C<float, int>().f(); //"Primary Template"C<int, float>().f(); //"int"C<float, double>().f(); //"double"C<float*, float>().f(); //"T* is used"C<float, float*>().f(); //"U* is used"C<int*, float*>().f(); //"T* and U* is used"C<float, float>().f(); //"T = U is used"// C<float* float*> 冲突}
0 0
- 类模板的特化
- 类模板的特化
- 类模板的特化和偏特化
- 类模板的 全特化、偏特化
- 类模板的特化,偏特化
- C++类模板的特化
- C++ 类模板的特化
- 类模板的偏特化
- C++类模板的特化
- 模板的特化、偏特化
- 模板的特化与偏特化 ,C++类模板的三种特化
- 类模板的全特化和偏特化
- 模板函数和类的特化以及偏特化
- (函数/类模板)的(偏特化/全特化)
- C++类模板的三种特化
- C++类模板的三种特化
- C++类模板的三种特化
- C++类模板的三种特化
- scan——Theano中循环的实现
- leetcode -- Best Time to Buy and Sell Stock III --重点
- codeforces 606D. Lazy Student(#335 逆最小生成树)
- Android中使用代码控制Wifi及数据连接网络开关
- linux ftp服务 vsftpd
- 类模板的特化
- IOS UISearchBar(一)
- jmeter性能测试交流群
- 我常用的Linux命令
- jquery中ajax请求全过程
- 3GPP 36211-c70-7
- 网卡的ring buffer调整
- iOS 后台定位
- Splinter