C++控制实例化

显式实例化使模板实例化时,文件中形成的实例各不相同,避免了大系统中一个文件一个实例的额外开销
形式如下:
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)有实例化
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值