[总结]编程中遇到的vc提示的一些警告
1、C4251
原因:数据成员方在dll导出类中使用模板类引起的 ;
方法:
1>#program warning( disable:4251 )-->不推荐;
2>将该数据成员改为指针方式(Ps:记住初始化和释放);
3>将该模板类及其依赖类导出.eg:
class __declspec( dllexport ) Test { public: template class __declspec( dllexport ) std::allocator<int>; template class __declspec( dllexport ) std::vector<int, std::allocator<int> >; public: std::vector<int> m_objCon; };
这种方法要注意的是必须要把要导出模板类的模板数据成员一并导出。有点类似于显式实例化。比如说你要导出boost::shared_ptr就还必须将其依赖的shared_count一并导出。导出map还需要导出对应pair等等。
4>Impl
#include <iostream> #include <vector> using namespace std; // 这些放到.h中 class Test_imp; class __declspec( dllexport ) Test { // 构造函数中初始化 析构中释放m_pImp; void test(); public: Test_imp* m_pImp; }; // 这个类放到cpp中去 class Test_imp { public: void test(){} std::vector<int> m_objCon; }; // 放到cpp中 void Test::test() { m_pImp->test(); }