在前一个示例中,模板是完全专用的。也就是说,模板定义了特定模板参数的实现。模板也可以部分专用,这意味着只有某些模板参数被指定,或者一个或多个参数被限定到某种类型。生成的部分专门化仍然是模板。例如,以下代码样本说明了主模板和该模板的完全专门化。
template<class T, class U> class A {...}; //primary template template<> class A<int, double> {...}; //specialization |
以下代码说明了主模板部分专门化的示例。
template<class U> class A<int> {...}; // Example 1 template<class T, class U> class A<T*> {...}; // Example 2 template<class T> class A<T**, char> {...}; // Example 3 |
示例 1 提供了用于第一个模板参数是 int 类型的情况的特殊模板定义。
示例 2 提供了用于第一个模板参数是任何指针类型的情况的特殊模板定义。
示例 3 提供了用于第一个模板参数是任何类型的指针到指针而第二个模板参数是 char 类型的情况的特殊模板定义。