DLL能导出模板类?

firstdad 2008-11-13 11:00:50
Base.DLL导出了个模板类,为什么不EXE链结的时候有问题?


// Base.DLL
class Base
{
virtual void fun();
}
class A: public Base
{
virtual void fun();
}
class B: public Base
{
virtual void fun();
}

template<class Type>
class C: public Base
{
virtual void fun()
{
_pT-> fun();
}
CT *_pT;
}




// EXE

C<B> *pC = new C<B>;
pC->fun();


请问为什么会有链结错误?
...全文
408 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
参数列表具体化后怎么导出模板类?
cetium 2010-11-08
  • 打赏
  • 举报
回复
在cpp里实例化一下
clever101 2010-08-16
  • 打赏
  • 举报
回复
学习一下。
cnliving 2008-11-28
  • 打赏
  • 举报
回复
模板函数/类不能导出到动态链接库(DLL)
2008年07月08日 星期二 17:56

模板函数在声明的时候, 其实并不存在,函数地址也就无从谈起了,而导出到动态链接库的函数都需要有地址,也就是说——函数模板不具备导出的基本条件。

函数模板在调用时后,有了具体的实现,这个时候才有了地址。 如果要导出,必须将参数类型列表具体化,比如说,有这么一个模板:

template <class T1,class T2>

void fn1(T1 testValue1,T2 testValue2)

{

}

将参数列表具体化

template <int,char*> __declspec(dllexport) void fn1(int testValue1,char* testValue2)
{
}
帅得不敢出门 2008-11-14
  • 打赏
  • 举报
回复
up 模板编译的分离模式大部分编译器是不支持的
jieao111 2008-11-14
  • 打赏
  • 举报
回复
up星语
phisherr 2008-11-13
  • 打赏
  • 举报
回复
不得行,模板是在编译期起作用的
sys0005 2008-11-13
  • 打赏
  • 举报
回复
模板就是代码级的复用,没法DLL导出的。
jackzhhuang 2008-11-13
  • 打赏
  • 举报
回复
不能,没办法,目前多数主流编译器仍然不支持实现与声明相分离的模板代码。
星羽 2008-11-13
  • 打赏
  • 举报
回复
上面转了篇文章给你
星羽 2008-11-13
  • 打赏
  • 举报
回复
模板函数/类不能导出到动态链接库(DLL)
2008年07月08日 星期二 17:56

模板函数在声明的时候, 其实并不存在,函数地址也就无从谈起了,而导出到动态链接库的函数都需要有地址,也就是说——函数模板不具备导出的基本条件。

函数模板在调用时后,有了具体的实现,这个时候才有了地址。 如果要导出,必须将参数类型列表具体化,比如说,有这么一个模板:

template<class T1,class T2>

void fn1(T1 testValue1,T2 testValue2)

{

}

将参数列表具体化

template <int,char*> __declspec(dllexport) void fn1(int testValue1,char* testValue2)
{
}
星羽 2008-11-13
  • 打赏
  • 举报
回复
dll 不能导出模板

65,211

社区成员

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

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