模板编译模式问题

OOPhaisky 2006-06-19 08:11:56
我想利用“分离模式”来编译我下面的模板程序(三个文件:head.h,main.cpp,other.cpp):
---------------------------------------------------
head.h:
#include <iostream>
using namespace std;

template <class T> //模板声明
void test(T a);
---------------------------------------------------
other.cpp:
#include "head.h"

export template <class T> //模板定义
void test(T a){
cout << a << endl;
}
---------------------------------------------------
main.cpp:
#include "head.h"

int main(int argc, char **argv){
test(9); //模板实例化
return 0;
}
---------------------------------------------------

然后,我首先在windows下利用visual studio.net进行编译---->失败。
我好像听说过vc并不支持模板的“分离模式”编译,但是gcc应该支持,所以我在linux中重新编译上面的程序:
g++ main.cpp other.cpp -o a.o
结果还是失败。

难道gcc也不支持“分离模式”编译?或者是在编译时还需要使用其他选项?

望高手指教,谢谢。
...全文
363 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireseed 2006-06-21
  • 打赏
  • 举报
回复
to lddLinan:那你觉得模版的符号应该怎么从DLL导出呢?
OOPhaisky 2006-06-21
  • 打赏
  • 举报
回复
好了,够热闹了,我也大概明白了,结贴了...
fireseed 2006-06-21
  • 打赏
  • 举报
回复
再说大一点,据我所知,apple机上似乎也没有支持“模版分离式编译”的编译器。

难道目前人类……

呵呵,开个玩笑。
fireseed 2006-06-21
  • 打赏
  • 举报
回复
综上所述,是PE文件的符号导出方式直接妨碍了模版和内联函数的分离式编译。

因此这是和win32架构直接相关的,在我看来,linux的架构也是一样!

因此又可以得到一个推论,在x86上实现模版的分离式编译不太现实
OOPhaisky 2006-06-21
  • 打赏
  • 举报
回复
to akirya(乱):

“gcc也不支持分离编译模版”,权威么?有没有“官方”的说法?
zcpro 2006-06-21
  • 打赏
  • 举报
回复
to all:模版是在编译时起作用的,而不是运行时,所以用dll导出整个模版从理论上就说不通,只有实例化的模版才能被导出,例如楼主导出template void test<int>(int a)是可以的。
  • 打赏
  • 举报
回复
gcc、vc 、bc 、intel C++目前都不支持分离编译模版
lddLinan 2006-06-21
  • 打赏
  • 举报
回复
你的DLL能支持inline么
fireseed 2006-06-20
  • 打赏
  • 举报
回复
export不是编译器不愿意支持,而是win32,说大一点是x86的架构体系想要支持它非常困难
OOPhaisky 2006-06-20
  • 打赏
  • 举报
回复
to 楼上各位:

俺知道vc不支持“export”,但是好像听说gcc支持,所以才想问一问,怎么才能在gcc下编译上面的程序阿?


(lyskyly(浮生三笑),好久不见了,有空还得一起讨论讨论问题)
tutu_cloud 2006-06-20
  • 打赏
  • 举报
回复
MSDN 中明确的说明了 VC不支持export
其他的编译器就要看它的文档了
winks 2006-06-20
  • 打赏
  • 举报
回复
可能考虑到模板技术太像宏了吧,所以分离模板就没有下功夫了
iambic 2006-06-20
  • 打赏
  • 举报
回复
世界上好像还没几个编译器支持模板的分离式编译模式吧.
lddLinan 2006-06-20
  • 打赏
  • 举报
回复
关DLL什么事?
如果编译器或是连接器下点功夫,DLL/OBJ屁事儿也不用管。

Win32下的DLL和Win32有关系,恩,有道理。
fireseed 2006-06-20
  • 打赏
  • 举报
回复
MS声称,VS2005已经支持了超过99%的ISO C++


我发现尚未支持的有异常规范,分离模版……

直得称赞的一面,100年不动摇的作用域问题终于得到改观了:

for( int i = 0; i < 100; i++ );
i = 5; // crash!
healer_kx 2006-06-20
  • 打赏
  • 举报
回复
gcc对模板的支持不咋地吧? 怎么可能和VS2003,2005比呢?
fireseed 2006-06-20
  • 打赏
  • 举报
回复
lddLinan:
dll的符号导出方式不可能直接支持模版,因此这是和win32架构直接相关的。
sharpdew 2006-06-20
  • 打赏
  • 举报
回复
gcc最新版本可以试验一下,应该和构架没关系,只和编译厂商是否达成一致标准有关,或者说这个关键字仍然有待商榷
cnhgj 2006-06-20
  • 打赏
  • 举报
回复
呵呵。目前的编译器还比较少支持export关键字的
lddLinan 2006-06-20
  • 打赏
  • 举报
回复
这个帽子也太大了,居然赖人家x86的架构体系。能不能解释一下?
加载更多回复(4)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧