zoukankan      html  css  js  c++  java
  • [总结]编程中遇到的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();
    }
  • 相关阅读:
    结婚电子
    ASP.NET 5简介
    定位500错误!
    Web项目
    JS编程
    CQRS 示例
    领域驱动设计的面向服务架构
    Oracle免费的便捷Web应用开发框架
    ThreadLocal是否会引发内存泄露的分析 good
    应用的代码没有用新的类库来进行编译(转)
  • 原文地址:https://www.cnblogs.com/arsblog/p/4828183.html
Copyright © 2011-2022 走看看