我有一个A类(我想导出),其中包含一个私有(private)结构的 vector 。编译代码时,我收到警告C4251(http://msdn.microsoft.com/en-us/library/esew7y1w.aspx)。为避免此警告,我进行了显式实例化。在VS2008中,此编译没有任何问题,但是在VS2010中,我遇到以下错误:
错误C2252:模板的显式实例化只能在 namespace 范围内发生
(错误C2252:http://msdn.microsoft.com/en-us/library/4ds5s2s4(v=vs.100).aspx)
有什么方法可以将类与 vector 一起导出并使结构私有(private)?
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_;
};
最佳答案
一个类的所有成员也需要导出。您可以使用pimpl idiom隐藏类的实现。