在DLL中封装模板类的问题()-其他
在DLL中封装模板类的问题()
#ifdef DLLCLASS_EXPORTS
#define DLL_CLASS _declspec(dllexport) //Dll
#else
#define DLL_CLASS _declspec(dllimport) //使用者
#endif
在类的声明时在Class 和类名之间加上DLL_CLASS就能导出类了
class DLL_CLASS QWnd
{
//….};
但是今天我想封装一个模板类就不行了
//模板链表类
template <class T>
class DLL_CLASS QList
{
//...
};
就出现编译错误
后来在网上查询后才知道,模板类在使用者调用的时候不能用导出宏,所以修改宏定义为:
#ifdef DLLCLASS_EXPORTS
#define DLL_CLASS _declspec(dllexport) //Dll
#define DLL_TEMPLATE_CLASS _declspec(dllexport) //模板类的导出
#else
#define DLL_CLASS _declspec(dllimport) //使用者
#define DLL_TEMPLATE_CLASS
#endif
模板类就用DLL_TEMPLATE_CLASS 宏来导出类,其他类用DLL_CLASS宏
//模板链表类
template <class T>
class DLL_TEMPLATE_CLASS QList
{
//...
};
————————
#ifdef DLLCLASS_EXPORTS
#define DLL_CLASS _declspec(dllexport) //Dll
#else
#define DLL_CLASS _declspec(dllimport) //使用者
#endif
在类的声明时在Class 和类名之间加上DLL_CLASS就能导出类了
class DLL_CLASS QWnd
{
//….};
但是今天我想封装一个模板类就不行了
//模板链表类
template <class T>
class DLL_CLASS QList
{
//...
};
就出现编译错误
后来在网上查询后才知道,模板类在使用者调用的时候不能用导出宏,所以修改宏定义为:
#ifdef DLLCLASS_EXPORTS
#define DLL_CLASS _declspec(dllexport) //Dll
#define DLL_TEMPLATE_CLASS _declspec(dllexport) //模板类的导出
#else
#define DLL_CLASS _declspec(dllimport) //使用者
#define DLL_TEMPLATE_CLASS
#endif
模板类就用DLL_TEMPLATE_CLASS 宏来导出类,其他类用DLL_CLASS宏
//模板链表类
template <class T>
class DLL_TEMPLATE_CLASS QList
{
//...
};