怎样将一个特定的模板类导出为DLL?谁能解释清楚

hjgmx 2003-12-29 09:50:44
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

template <class T> CTest
{
public:
T* pValue;
CTest(const T& value)
{
pValue = new T;
*pValue = value;
}
~CTest()
{
delete pValue;
}
};

class TEST_API CMyTest
{
public:
CTest<long> m_Long;
CTest<char> m_Char;
void Show();
};

在VC6下编译,提示告警,warning C4251, class CTest<long>' needs to have dll-interface to be used by clients of class.
可是怎样才能将该特定的模板类导出呢?

上面的程序只是一个说明问题的例子,因为我实际使用的模板类是一个比较复杂的类,没有必要去重写。
...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Semigod 2004-01-02
  • 打赏
  • 举报
回复
在www.codetools.com有一篇文章专门讲这个的,你去看看吧。那作者使用了一个技巧来导出模板
yifengling0 2003-12-29
  • 打赏
  • 举报
回复
http://search.csdn.net/expert/topic/50/5001/2002/6/5/780080.htm
jimsleon 2003-12-29
  • 打赏
  • 举报
回复
模板类是后绑定的,当你定义了模板但是没有任何地方使用的时候编译器是不会编译这些代码的,只有你在使用是参数化之后编译器才编译,而且只编译使用到的函数,因为你只定义模板而没有使用的时候编译器不生成任何代码,所以模板类是不可能从DLL中导出的,你只需要将包含模板定义的头文件给使用者就行了。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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