DLL能导出模板类?
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();
请问为什么会有链结错误?
[解决办法]
dll 不能导出模板
[解决办法]
不能,没办法,目前多数主流编译器仍然不支持实现与声明相分离的模板代码。
[解决办法]
模板就是代码级的复用,没法DLL导出的。
[解决办法]
不得行,模板是在编译期起作用的
[解决办法]
up星语
[解决办法]
up 模板编译的分离模式大部分编译器是不支持的
[解决办法]
模板函数/类不能导出到动态链接库(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)
{
}