显式实例化使模板实例化时,文件中形成的实例各不相同,避免了大系统中一个文件一个实例的额外开销
形式如下:
extern template declaration;
(
declaration 为类或函数声明)
extern template class Blob<string>;
extern template compare(const int&,const int&);
则在后期调用时,如
Blob<string> a1,a2;
Blob<T>实例化过程会出现在实例化定义的文件中,而在本文件中不生成代码,与处理类模板的普通实例化不同,普通实例化中,一个类模板的成员函数只有在遇到它时才会进行实例化,类模板的实例化定义会实例化该类的所有函数,因为它不了解程序会使用哪些成员函数。
定义形式如下:
template class Blob<string>{};
P599 练习16.27
template <typename T> class Stack {};
void f1(Stack<char>); //(a)未被实例化
class Exercise {
Stack<double> &rsd; //(b)未被实例化,普通实例化中,遇到才实例化
Stack<int> si; //(c)未被实例化
};
int main()
{
Stack<char> *sc; //(d)有实例化
f1(*sc); //(e)有实例化
int iObj = sizeof(Stack<string>);//(f)有实例化
}