如何导出包含私有结构的向量的类

时间:2012-02-08 09:26:49

标签: c++ visual-c++-2010

我有一个A类(我想导出),它包含一个私有结构的向量。编译代码时,我有警告C4251(http://msdn.microsoft.com/en-us/library/esew7y1w.aspx)。为了防止这种警告,我做了一个明确的实例化。在VS2008中,这编译没有任何问题,但在VS2010中我有以下错误:

错误C2252:模板的显式实例化只能在命名空间范围内进行

(错误C2252:http://msdn.microsoft.com/en-us/library/4ds5s2s4(v=vs.100).aspx

有没有办法用向量导出类并保持结构是私有的?

class __declspec(dllexport) A
{
  public:
    A();
    ~A();

  private:
    struct StructData
    {
      unsigned int b_;
    };

#if defined(WIN32) && !defined(__GNUC__)
    template class __declspec(dllexport) std::allocator<StructData>; // explicit instantiation needed to prevent warning C4251
    template class __declspec(dllexport) std::vector<StructData, std::allocator<StructData> >; // explicit instantiation needed to prevent warning C4251
#endif
    std::vector<StructData> StructDataVector_;
};

1 个答案:

答案 0 :(得分:0)

班级的所有成员也需要导出。您可以使用pimpl idiom隐藏班级的实施。