模板函数的包含编译模式

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在包含编译模式下,我们在每个模板被实例化的文件中包含函数模板的定义,并且往往把它定义放在头文件中,像内联函数一样。但是,这是否以为着编译器必须在每个调用实例的文件中实例化同一模板参数实例呢?不,同一参数的模板函数只会被实例化定义一次,具体在哪个地方实例化定义要取决于编译器。

//template.h

#include

using namespace std;

extern void test1();

extern void test2();

template

void test(T a)

{

?cout<} //test1.cpp #include "template.h"void test1(){?test(1);?void (*p)(int)=&test;?cout<} //test2.cpp #include "template.h"void test2(){?test(2);?void (*p)(int)=&test;?cout<} //main.cpp #include "template.h"int main(){?test1();?test2(); ?return 0;} 程序输出结果: 10040129E20040129E 可以看出对于参数为int类型的test()函数,其只被实例化了一次,因为两次调用的函数入口地址都一样!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航