[百度空间] [原]DLL导出实例化的模板类
2015-05-18 19:04
162 查看
因为模板是在编译的时候根据模板参数实例化的,实例化之后就像一个普通的类(函数),这样才有对应的二进制代码;否则,没有模板参数,那么编译器就不知道怎么生成代码,所以生成的DLL就没有办法导出模板了.
但是根据MSDN的描述,可以导出模板类的实例化后的代码(注意:这里不是指实例化模板类的一个对象),
比如 template<typename T> class singleton,那么可以导出singleton<MyClass>或者其他已知类型的类代码.
详见: http://support.microsoft.com/kb/168958/en-us.这个例子比较老,竟然是VC5的代码,不过我试了一下,在VC8下可以导出,不过要将exe文件中的extern声明去掉.否则不能通过.
关键语句:
#ifdef EXP_STL
# define DECLSPECIFIER __declspec(dllexport)
#else
# define DECLSPECIFIER __declspec(dllimport)
#endif
分别在EXE和DLL中使用这个声明: template class DECLSPECIFIER TEMPLATE<TYPE>;
就可以导出一个TYPE实例的TEMPLATE类代码.
MSDN上说,从一个实例化模板类集成过来的DLL导出类,就不用再声明了,好像因为在声明这个类的时候编译器已经知道了:
class DECLSPECIFIER myInterface : public singleton<myInterface>{}
class DECLSPECIFIER myInterface : public std::vector<short*>{}
这种方法直接就可以导出了,而且好像有些情况也里也不用去管C4251(http://msdn.microsoft.com/en-us/library/esew7y1w.aspx)的编译警告...
但是根据MSDN的描述,可以导出模板类的实例化后的代码(注意:这里不是指实例化模板类的一个对象),
比如 template<typename T> class singleton,那么可以导出singleton<MyClass>或者其他已知类型的类代码.
详见: http://support.microsoft.com/kb/168958/en-us.这个例子比较老,竟然是VC5的代码,不过我试了一下,在VC8下可以导出,不过要将exe文件中的extern声明去掉.否则不能通过.
关键语句:
#ifdef EXP_STL
# define DECLSPECIFIER __declspec(dllexport)
#else
# define DECLSPECIFIER __declspec(dllimport)
#endif
分别在EXE和DLL中使用这个声明: template class DECLSPECIFIER TEMPLATE<TYPE>;
就可以导出一个TYPE实例的TEMPLATE类代码.
MSDN上说,从一个实例化模板类集成过来的DLL导出类,就不用再声明了,好像因为在声明这个类的时候编译器已经知道了:
class DECLSPECIFIER myInterface : public singleton<myInterface>{}
class DECLSPECIFIER myInterface : public std::vector<short*>{}
这种方法直接就可以导出了,而且好像有些情况也里也不用去管C4251(http://msdn.microsoft.com/en-us/library/esew7y1w.aspx)的编译警告...
相关文章推荐
- DLL导出实例化的模板类
- 模板类和模板函数在dll导出
- vc 的dll可以导出模板类的具体子类,但是这个模板类中不能用static变量
- DLL中导出STL模板类的问题
- 在dll中导出模板类的方法
- VS编译器从DLL导出模板类
- DLL导出STL模板类和成员变量
- DLL导出STL模板类和成员变量
- 一个获取dll导出函数的模板类
- DLL 函数导出的规则和方法
- [DLL]使用def文件从dll导出
- 利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用
- 从DLL中导出函数
- Dll导出表Hook
- 透过汇编另眼看世界之DLL导出函数调用
- 在DLL中导出另一静态库中的函数
- 如何将动态库(DLL)中的类导出(二)
- VS2010中如何查看DLL的导出接口(转)
- C++封装DLL,导出一个类
- Win32_动态链接库_导出DLL中的变量(四)