模板有两种特化,全特化和偏特化(局部特化)模板函数只能全特化,没有偏特化(以后可能有)。模板类是可以全特化和偏特化的。

全特化:

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全特化 偏特化 成员特化相关推荐

  1. 模板 泛化 全特化 偏特化

    template<>出现,就表示要特化了 为什么要特化呢?泛化不就是为了解决数据类型不一致吗? 泛化是通用,特化是优化,缺一不可 特化,又被成为全特化 full-specializatio ...

  2. 操作符重载and模板(泛化, 全特化, 偏特化)

    模板 Header(头文件)中的防卫式声明.布局 // complex.h// guard 防卫式声明 #ifndef __COMPLEX__ #define __COMPLEX__// 0.forw ...

  3. C++ 模板全特化中的函数特化

    转载:http://blog.csdn.net/rain_qingtian/article/details/15815251 [cpp] view plaincopy print? #include  ...

  4. C/Cpp / STL / 模板全特化和偏特化

    栗子 #include <iostream>template <typename T1, typename T2> struct Test {void Print() { st ...

  5. C++11新特性之泛型编程与模板

    模板 泛型编程 函数模板 普通函数模板 成员函数模板 函数模板重载 模板函数的特化 类模板 类模板中的成员函数模板 类模板的特化与偏特化 类模板成员特化 模板 Template所代表的泛型编程是C++ ...

  6. Th4.6:模板全特化、偏特化(局部特化)详述

    本小节回顾的知识点分别是模板全特化.偏特化(局部特化). 今天总结的知识分为以下4个大点: (1)特化与泛化 (2)类模板特化     (2.1)类模板全特化         a)常规全特化      ...

  7. C++ 模板 全特化与偏特化

    C++ 模板 全特化与偏特化 模板 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是 ...

  8. (函数/类模板)的(偏特化/全特化)

    特化的概念 特化,就是将泛型的东东搞得"具体化"一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰或完全被指定了下 ...

  9. 模板类的全特化、偏特化

    我们先来定义一个普通的模板类 1 template<class T> 2 struct Test 3 { 4 Test(){ cout << "模板类" & ...

  10. [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)

    http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html 1.  主版本模板类 首先我们来看一段初学者都能看 ...

最新文章

  1. phpmyadmin 主机名自动补全
  2. 经典插花的教训 PKU 1157
  3. 直流耦合and交流耦合
  4. olap 多维分析_OLAP(在线分析处理)| OLAP多维数据集和操作
  5. 基于Linux命令行终端的ftp客户端程序
  6. 进程线程与栈、堆的关系
  7. LINUX安装TensorRT及特别注意事项
  8. 在两台电脑之间通过网线、局域网快速传东西的几种方法
  9. JAVA工具_PinyinConv
  10. peewee 操作mysql_peewee 数据库操作
  11. 25、网络必备知识:Ping命令的7个基础用法,掌握了贼厉害
  12. 开源社区——自我成长的策源地
  13. Latex Tips: 如何输入矩阵(illustrated in Jupyter Notebook)
  14. android 各个存储路径及获取方法总结
  15. 开源软件和开源社区的反思
  16. 【TouchDesigner】Feedback的应用NO.1
  17. 爆肝一周,用Python在物联网设备上写了个智能语音助手
  18. NFT价值及白皮书获取
  19. 微信公众号开发——现金红包、企业付款
  20. SEO优化技术 - K站恢复快照收录排名

热门文章

  1. 资源变现小程序添加折扣充值和折扣影票插件
  2. 六.爬虫--京东登录破解(二)
  3. 2020牛客暑期多校训练营(第九场) Groundhog and 2-Power Representation
  4. 在家快发霉了?数据告诉你,网友们都怎么打发时间 | DT数说
  5. sklearn学习笔记(1)—make_blobs函数及参数
  6. 第十九章 存储和使用流数据(BLOBs和CLOBs)
  7. laravel安装barryvdh/laravel-snappy 笔记
  8. python rfm 细分_Python中的客户细分
  9. 找到一份满意的工作到底要花多少钱?
  10. 量化金融基本模型及方法讲习班系列笔记——‘AI与金融工程’