CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

请高手指点导出模板类

楼主chbq1210()2006-03-09 20:24:07 在 VC/MFC / 进程/线程/DLL 提问

写了个类模板,想导出来做成dll形式,不知道技术上可行不,光是导出类还是可以的,但是导出模板类就不行了,在网上没有找到关可以的方法,在此请教各位高手。现以一个简单的模板类做试验:  
  头文件:  
  #ifndef POINT_H  
  #define     POINT_H  
     
  template<class   ET>  
  class   Point  
    {  
    public:  
    ET   x;  
    ET   y;  
    Point();  
    Point(ET   x_coordinate,ET   y_coordinate);  
    void   Print();  
    };  
  #endif  
   
  源文件:  
  #include   "iostream.h"  
  #include   "Dlltest.h"  
  template<class   ET>  
  Point::Point()  
  {  
  x=0;  
  y=0;  
  }  
  template<class   ET>  
  Point::Point(ET   x_coordinate,ET   y_coordinate)  
  {  
  x=x_coordinate;  
  y=y_coordinate;  
  }  
  template<class   ET>  
  void   Point::Print()  
  {  
  cout<<"x="<<x<<"y="<<y<<endl;  
  }  
   
  用如下最简单的方式可以导出,(源文件不要template)  
  #ifndef DLLTEST_H  
  #define   DLLTEST_H  
   
  extern   "C"   class   _declspec(dllexport)   Point  
    {  
    public:  
    float   x;  
    float   y;  
    Point();  
    Point(float   x_coordinate,float   y_coordinate);  
    void   Print();  
    };  
  #endif  
  但是如果要把template一起导出呢,请问怎么办?  
  再问一下,当加了extern   "C"修饰之后,导出的dll还是发生了名字改编,应该怎样消除?谢谢!  
  问题点数:20、回复次数:9Top

1 楼teli_eurydice(哭泣的仙人掌。。。。)回复于 2006-03-09 20:46:02 得分 3

模板类只有头文件你怎么导出阿,呵呵,好像不行Top

2 楼chbq1210()回复于 2006-03-09 22:32:47 得分 0

好像对于模板类都是头文件与源文件写在一起的,分开写是不是不太好?Top

3 楼CSDNWW(中国软件WW)回复于 2006-03-12 11:58:50 得分 3

就不能分开写Top

4 楼mythay(小黑)回复于 2006-03-13 11:47:05 得分 6

模版类无法导出,因为模版只是在使用的时候才知道他的类型,才能编译成相应的二进制代码。比如里面定义的模版类型占多大空间,这对编译器都是未知的。  
  不说说不定将来编译器支持也说不定。Top

5 楼chbq1210()回复于 2006-03-15 10:17:01 得分 0

好像是,我看了一下,像vector这样的STL容器,它们都是把定义和实现放在一个头文件中,然后放在VC的include目录下的,Top

6 楼mme(dog)回复于 2006-03-16 11:42:14 得分 2

vc不支持分开写,有一些编译器支持,比如c++   builderTop

7 楼he_sl(he_sl)回复于 2006-03-16 11:50:36 得分 0

guanzhuTop

8 楼akirya(坏[其实偶不是什么所谓的坏人])回复于 2006-03-16 15:07:59 得分 0

目前   类模板   无法导出。估计十年八年之后才或许才有可能Top

9 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2006-03-18 18:41:52 得分 6

vc不支持分开写,有一些编译器支持,比如c++   builder  
  -------------------------  
  c++   builder   不支持模板类的分离编译  
   
   
   
  模板的本质是编译器的源码级的展开  
  既在   参数化的时候   是必须要cpp代码的  
   
  所以用DLL导出化   你只能实例化后导出  
   
   
  或者将   .h   和   .cpp放一个文件   做成*.objTop

相关问题

  • 怎么样在DLL中导出模板类啊?
  • 关于使用C++模板类,高手指点
  • 请指点有关模板类的问题
  • dll导出类
  • ????????请DLL高手指点 怎样从MFC扩展DLL中导出CFORMVIEW及其派生类
  • 如何制作一个类似于SQL SERVER 里的导入导出(谢谢各位大虾指点)
  • 请指点下:注册 COM Interop 失败。 类型库导出程序无法加载所需的库 MSCOREE.TLB。
  • 分离式编译下模板如何导出,VC 6.0下
  • asp.net(c#)如何把数据库导出一个模板excel中?
  • C++模板类

关键词

  • 模板
  • template
  • 导出
  • coordinate
  • 模板类
  • 高手
  • point
  • et
  • 类
  • print

得分解答快速导航

  • 帖主:chbq1210
  • teli_eurydice
  • CSDNWW
  • mythay
  • mme
  • wangjia184

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo