随笔-174  评论-598  文章-0  trackbacks-0
<<c++ primer>>里面说,编译模板函数的时候C++支持两种模式,一种是包含模式,就是把模板函数的声明和实现都放在同一个文件里面,我注意到STL就是这样的,而且sgi和vc的实现都是如此,也许是因为早期对模板的支持不太好的缘故吧;另一种是分离编译模式,可以把模板函数的声明和实现分开在头文件和.cpp文件中,此时需要编译器支持关键字export.

测试的代码如下,非常的简单:
头文件里面的声明:
template <class T>
void test(T n);

.cpp文件里面的实现,注意书写的格式:
export // 前面加上关键字export
template <class T>
void test(T n)
{
    std::cout 
<< "n = " << n << std::endl;
}


我用vc和gcc分别的编译了一下,VC(我用的是7.1)中根本就不能识别export关键字,但是gcc下面可以编译过去.但是如果把export关键字去掉那么两个编译器都是可以编译过去的,而且也没有对函数的结果产生影响,这是否说明现在已经不再需要这个export关键字了?
posted on 2006-07-11 19:04 那谁 阅读(1223) 评论(12)  编辑 收藏 引用 所属分类: C\C++

评论:
# re: 测试了一下VC和gcc对关键字export的支持 2006-07-11 19:21 | LOGOS
嗯.也许可以说是分离编译的功能已经被支持,但是那个语法标准没有被MS采纳而已.  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2006-07-11 19:26 | fanofvc
看看<Exceptional C++ Style>你就会知道目前的编译器基本上都不支持export关键字。  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2006-07-12 11:33 | 周星星
GCC版本是号多少?  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2006-07-12 11:50 | 创系
to 星星,我在win下用的mingw,版本号是3.4.2  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2006-07-12 17:37 | 周星星
@创系
哦,谢谢,但我这里不行  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2006-08-06 19:24 | tango
仅仅是可以编译过而已,应该不能用,如果要使用仍需要include .c,失去了隐藏实现的意义。

  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2006-08-06 21:12 | tango
顺便问一下楼主用什么工具贴的代码?带语法加亮和解析。
有现成的工具或教本嘛?
谢了  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2006-08-06 21:59 | 创系
@tango
这个blog自带的code功能,也是把我吸引到这里的原因之一:)  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2007-03-20 16:44 | 空见
你仅仅声明和实现了模板,没有"具现点",也就是说,没有使用这个模板,那么就不会有连接问题出现,如果你使用这个模板,那么ms的连接器将无法找到这个模板的实现,也就无法具现(instantiate)这个模板,而支持export的编译器将告诉连接器:"这个编译单元里有你要的实现,具现时来找吧",于是问题解决了.  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2007-03-22 19:24 | 糖菓
老大,template只在调用时才会生成。
分离模板是指你在另一个文件 xxx.cpp 中只include 你上边的.h时,也能正常连接通过...

你这个代码都没有生成,怎么能证明不用export ....
  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2007-03-22 23:17 | 创系
谢谢楼上几位朋友的指正~~  回复  更多评论
  
# re: 测试了一下VC和gcc对关键字export的支持 2009-03-23 22:25 | AAA
有本书这样写:
//*.h

#if defined USE_EXPORT
#define EXPORT export
#else
#define EXPORT
#endif

EXPORT
/*********some code***********/

#ifnde UES_EXPORT
#include"*.cpp"
#endif  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
.NET频道  博客园社区  闪存
网站导航: