在很多模板库中,都用到了C++的部分实例化。
所谓部分实例化,是这样的
template<class T> class A { // 主模板 int x; }; template<class T> class A<T*> { // 半实例化模板 long x; }; template<template<class U> class V> class C { V<int> y; V<int*> z; }; C<A> c;C<A>::V<int> 使用的是主模板,因此c.y.x 类型为int;
C<A>::V<int*> 使用的是半实例化的模板,因此c.z.x类型为long.
再有例子
template<int I, int J, class T> class X { }; // #1 template<int I, int J> class X<I, J, int> { }; //#2 template<int I> class X<I, I, int> { }; //#3 template<int I, int J> void f(X<I, J, int>); //#A template<int I> void f(X<I, I, int>); //#B模板#1是主模板,#2和#3是半实例化的模板,其中#3的实例化程度要比#2要高。所以,函数 #B使用的是模板#3而不是模板#2。函数#A使用模板#2。