Как экспортировать класс, содержащий вектор закрытой структуры - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть класс 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 голосов
/ 09 февраля 2012

Все члены класса также должны быть экспортированы. Вы можете использовать идиому pimpl , чтобы скрыть реализацию вашего класса.

...