部分模板特例化与全部模板特例化有什么区别阿各位,该怎么处理

部分模板特例化与全部模板特例化有什么区别阿各位
~~~~

------解决方案--------------------
看书.
------解决方案--------------------
找《C++ Primer》看看就知道了。
------解决方案--------------------
全特化就是用一组确定的类型,对每一个模板参数进行特化:
template <typename A, typename B, typename C>
class X {...}; // (1)
template <>
class X <int, float, string> {...}; //(2)
当编译器遇到X <int, float, string> 的模板实例化请求,则使用特化后的版本,即(2)。其他任何类型的组合都是用基本模板,即(1)
局部特化通常有两种基本情况:
1、对部分模板参数进行特化:
template <typename B, typename C>
class X <int, B, C> {...}; // (3)
当编译器遇到X <int, float, string> 的模板实例化请求,使用这个特化的版本(3)。而当编译器遇到X <int, double, char> 时,也是用这个特化版本。也就是说,只要X <> 实例化时,第一个模板实参是int,就使用特化版本。
2、使用具有某一特征的类型,对模板参数进行特化:
template <typename T>
class Y {...}; //(4)
template <typename T>
class Y <T*> {...}; //(5)
当编译器遇到Y <int*> 时,使用特化模板(5)。当编译器遇到T <float*> 时,也使用特化模板(5)。而其他类型的实例化,如Y <int> 则使用基本模板(4)。也就是说,当模板实参符合特化版本所需的特征时,(在上面例子中是某个类型的指针),则使用特化版本。
这两种情况有时会混合使用,比如:
template <typename A, typename B>
class Z {...}; //(6)
template <typename A>
class Z <A&, char> {...}; //(7)
当编译器遇到Z <int&, char> 或者Z <string&, char> 时,使用特化模板(7)。其他情况使用基本模板(6),比如Z <int&, float> 或Z <int, char> 等等。

局部特化还有一种奇妙的用法:
template <typename T>
class F {...}; // (8)
template <typename R, typename P1, typename P2>
class F <R (*)(P1, P2)> {...}; // (9)
我们有函数:int f1(float a, double b);和string f2(int a, int b)。则如果我们使用这两个函数的指针实例化这个模板:F <f1> 或F <f2> ,编译器就会使用特化版本(9)。也就是说,这里用一个有两个参数,并有返回值(参数和返回值的类型任意)的函数指针特化了F。这种形式可以引申到其他形式。这类特化方式的一个典型应用就是boost::function。
------解决方案--------------------
一个是特化一个特定的类型组合,一个是特化一组
------解决方案--------------------
你可以这么想:全特化有点类似用一个字符串来查找文件,部分特化有点类似用了通配符来查找