模板编译模型

 

当编译器看到模板定义的时候,它不立即产生代码。只有在看到用到模板时,如调用了函数模板或调用了类模板的对象的时候,编译器才产生特定类型的模板实例。

模板要进行实例化,编译器必须能够访问定义模板的源代码。当调用函数模板或类模板的成员函数的时候,编译器需要函数定义,需要那些通常放在源文件中的代码。

 

标准C++为编译模板代码定义了两种模板。在这两种模型中,类定义和函数声明放在头文件中,而函数定义和成员定义放在源文件中。两种模型的不同在于,编译器怎样使用来自源文件的定义。

1.包含编译模型

2.分别编译模型

 

 

 

 

 

 

根据MSDN上给出的VS2010模板编译模型

 

The following list shows some differences between Microsoft C++ and other compilers.

  • The compiler cannot instantiate a template outside of the module in which it is defined. Visual C++.NET does not support the export keyword.

 

对于标准C++定义的两种模板编译模型都没很好的支持,只能是声明和定义都放在同一个文件中,否则会出现链接错误

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值