现在的位置: 首页 > 综合 > 正文

模板的复习

2013年12月05日 ⁄ 综合 ⁄ 共 1069字 ⁄ 字号 评论关闭

 1.template <class T> class Arry{};  Arry:是模板.    Arry<int>:才是类. :  属于编译时替换。
2. 模板特例化:模板主要用于通用的功能:类或函数,但并不是每个都通用,总有一些特例存在(某些数据类型不支持通用的操作),因此,模板特例化是为了这么一些特例存在的。    类名<...>,函数名<...>, 尖括号在他们的后面,内部必须跟具体的类型(不带变量名),这就是特例化。(如同:函数重载的道理)
如:类的特例话template <> class A<char*>{} :A<char*> a;   template<class T> class A<T,int>{}    A<int,int> b;
        函数成员特例话(如果该特例仅仅只是一个函数的差别,其他的构造、西沟都一样的话,我们可以选择部分函数特例(类似于函数重载)):
     template<> void A<char*>::fun(char* c){}   A<char*> a;a.fun(); 
        全局函数的特例话:template <> void abc<char*>(char* a){} abc("132");
3.遵循原则:1 最佳匹配原则   2 指针优先原则
4 .有如下情况:

A; template <class T1,class T2> class pair{};  ----> pair<double ,double> pl;

B; template <class T1> class pair <T,int >{};===--->pair<double,int> p2;

C; template <> class pair<int,int>{}; -----------> pair<int,int> p3;

 

A; template <class T> class feeb{}; -------------->feeb<char>

B; template <class T1*>class feeb{};---------->feeb<char*>

 

A; template <class T1,class T2,class T3> class trio{};  ------>

B; template <class T1,class T2>class trio<T1,T2,T3>{};---->要求后面2个同类型的,来优先调用这个东西。

C; template <class T1> class trio<T1,T1*,T1*>{};

出错情况:

1. 定义时总是忘记了加 < >

2.模版特例化时,类名/函数名 后面加上“形参变量,晕死”,----应该“只有类型而已”

 

抱歉!评论已关闭.