请高手指点导出模板类
写了个类模板,想导出来做成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




