STL全特化 偏特化 成员特化
模板有两种特化,全特化和偏特化(局部特化)模板函数只能全特化,没有偏特化(以后可能有)。模板类是可以全特化和偏特化的。
全特化:
template<>
class cla_template_name<特化类型>{};
成员特化:
template<>
ret_type cla_template_name<特化类型>::memb_func_name(arglist,..){}类模板在实例化时一定要显示类型实例化
类模板可以有缺省类型,类模板也可以有普通模板参数(非类型模板参数)全特化,就是模板中模板参数全被指定为确定的类型。
全特化也就是定义了一个全新的类型,全特化的类中的函数可以与模板类不一样。
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;template<typename T=int>
class Comptor{private:T x;T y;
public:Comptor(const T& x,const T& y):x(x),y(y){}T max(){return x>y?x:y; }T min(){return x<y?x:y; }
};//全特化
/*
template<>
class Comptor<const char*>{
private:const char *x;const char *y;
public:Comptor(const char* & x,const char* & y):x(x),y(y){}const char* max(){return strcmp(x,y)>0?x:y; }const char* min(){return strcmp(x,y)<0?x:y; }
};
*/
//成员特化
template<>
const char *Comptor<const char*>::max(){return strcmp(x,y)>0?x:y;
}
template<>
const char *Comptor<const char*>::min(){return strcmp(x,y)<0?x:y;
}int main(){Comptor<int> c1(1,2);Comptor<> c2(3,4);cout << c2.max() << endl;cout << c2.min() << endl;const char *s1 = "hello";const char *s2 = "hi";Comptor<const char*> c3(s1,s2);cout << c3.max() << endl;//cout << c3.min() << endl;return 0;
}
局部特化 偏特化
1.普通的类 某些成员函数是模板
2.针对指针和数组进行偏特化
3.针对模板类型偏特化
#include <iostream>
using namespace std;//针对类型局部特化
template<typename T,typename N>
class A{public:A(){cout << "A<T,N>" << endl; }
};
//偏特化
template<typename T>
class A<T,int>{public:A(){cout << "A<T,int>" << endl; }
};
template<>
class A<int,int>{public:A(){cout << "A<int,int>" << endl; }
};template<typename T>
class B{public:B(){cout << "B<T>" << endl; }
};
//针对指针实现偏特化
template<typename T>
class B<T*>{public:B(){cout << "B<T*>" << endl; }
};
//针对数组实现偏特化
template<typename T>
class B<T[]>{public:B(){cout << "B<T[]>" << endl; }
};template<typename T1,typename T2,typename T3>
class C{public:C(void){cout << "C<T1,T2,T3>" << endl; }
};template<typename T1,typename T2>
class C<T1,T2,T2>{public:C(void){cout << "C<T1,T2,T2>" << endl; }
};template<typename T>
class C<T,T,T>{public:C(void){cout << "C<T,T,T>" << endl; }
};template<typename T>
class C<T,T*,T*>{public:C(void){cout << "C<T,T*,T*>" << endl; }
};int main(){//选择特化程序更高的版本A<int,int> a; //全特化 A<int,int>A<double,int> b; //偏特化 A<T,int>A<short,double> c; //通用 A<T,N>//针对指针和数组进行偏特化 如果类型为指针和数组会选择指针和数组偏特化的版本B<int*> d;B<int[]> e;B<int> f;//匹配度高的特化优先C<int,int,int> g;C<int,int*,int*> h;return 0;
}
STL全特化 偏特化 成员特化相关推荐
- 模板 泛化 全特化 偏特化
template<>出现,就表示要特化了 为什么要特化呢?泛化不就是为了解决数据类型不一致吗? 泛化是通用,特化是优化,缺一不可 特化,又被成为全特化 full-specializatio ...
- 操作符重载and模板(泛化, 全特化, 偏特化)
模板 Header(头文件)中的防卫式声明.布局 // complex.h// guard 防卫式声明 #ifndef __COMPLEX__ #define __COMPLEX__// 0.forw ...
- C++ 模板全特化中的函数特化
转载:http://blog.csdn.net/rain_qingtian/article/details/15815251 [cpp] view plaincopy print? #include ...
- C/Cpp / STL / 模板全特化和偏特化
栗子 #include <iostream>template <typename T1, typename T2> struct Test {void Print() { st ...
- C++11新特性之泛型编程与模板
模板 泛型编程 函数模板 普通函数模板 成员函数模板 函数模板重载 模板函数的特化 类模板 类模板中的成员函数模板 类模板的特化与偏特化 类模板成员特化 模板 Template所代表的泛型编程是C++ ...
- Th4.6:模板全特化、偏特化(局部特化)详述
本小节回顾的知识点分别是模板全特化.偏特化(局部特化). 今天总结的知识分为以下4个大点: (1)特化与泛化 (2)类模板特化 (2.1)类模板全特化 a)常规全特化 ...
- C++ 模板 全特化与偏特化
C++ 模板 全特化与偏特化 模板 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是 ...
- (函数/类模板)的(偏特化/全特化)
特化的概念 特化,就是将泛型的东东搞得"具体化"一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰或完全被指定了下 ...
- 模板类的全特化、偏特化
我们先来定义一个普通的模板类 1 template<class T> 2 struct Test 3 { 4 Test(){ cout << "模板类" & ...
- [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html 1. 主版本模板类 首先我们来看一段初学者都能看 ...
最新文章
- phpmyadmin 主机名自动补全
- 经典插花的教训 PKU 1157
- 直流耦合and交流耦合
- olap 多维分析_OLAP(在线分析处理)| OLAP多维数据集和操作
- 基于Linux命令行终端的ftp客户端程序
- 进程线程与栈、堆的关系
- LINUX安装TensorRT及特别注意事项
- 在两台电脑之间通过网线、局域网快速传东西的几种方法
- JAVA工具_PinyinConv
- peewee 操作mysql_peewee 数据库操作
- 25、网络必备知识:Ping命令的7个基础用法,掌握了贼厉害
- 开源社区——自我成长的策源地
- Latex Tips: 如何输入矩阵(illustrated in Jupyter Notebook)
- android 各个存储路径及获取方法总结
- 开源软件和开源社区的反思
- 【TouchDesigner】Feedback的应用NO.1
- 爆肝一周,用Python在物联网设备上写了个智能语音助手
- NFT价值及白皮书获取
- 微信公众号开发——现金红包、企业付款
- SEO优化技术 - K站恢复快照收录排名
热门文章
- 资源变现小程序添加折扣充值和折扣影票插件
- 六.爬虫--京东登录破解(二)
- 2020牛客暑期多校训练营(第九场)	Groundhog and 2-Power Representation
- 在家快发霉了?数据告诉你,网友们都怎么打发时间 | DT数说
- sklearn学习笔记(1)—make_blobs函数及参数
- 第十九章 存储和使用流数据(BLOBs和CLOBs)
- laravel安装barryvdh/laravel-snappy 笔记
- python rfm 细分_Python中的客户细分
- 找到一份满意的工作到底要花多少钱?
- 量化金融基本模型及方法讲习班系列笔记——‘AI与金融工程’