std :: unique_ptr Pickel in der DLL erzeugt C4251 mit Visual Studio

Dies ist kein aktuelles Problem, aber ich möchte meinen Code von Warnungen befreien, damit mir das auf die Nerven geht.

Ich habe die C ++ 11-Version von Pimpl verwendet, um die Klassenimplementierung für meine Bibliothek auf die übliche Weise auszublenden.

// dll header
class FrameworkImpl;

class EXPORT_API Framework
{
    Framework(const Framework&) = delete;
    Framework& operator=(const Framework&) = delete;
    Framework(Framework&&) = delete;
    Framework& operator=(Framework&&) = delete;

public:
    Framework();
    ~Framework();

private:
    std::unique_ptr<FrameworkImpl> impl_;
};

// application implementation
int main()
{
    std::unique_ptr<Framework> test = std::make_unique<Framework>();
}

lles wird gut, aber ich werde weiterhin die Warnung erhalten:

warning C4251: 'Framework::impl_': class 'std::unique_ptr<FrameworkImpl,std::default_delete<_Ty>>' needs to have dll-interface to be used by clients of class 'Framework'

So habe ich versucht hinzuzufügen:

template class EXPORT_API std::unique_ptr<FrameworkImpl>;

Vor der Forward-Deklaration würde sich die Warnung jedoch nur ändern zu:

warning C4251: 'std::_Unique_ptr_base<_Ty,_Dx>::_Mypair': class 'std::_Compressed_pair<_Dx,FrameworkImpl *,true>' needs to have dll-interface to be used by clients of class 'std::_Unique_ptr_base<_Ty,_Dx>'

Ich sehe dieses Problem seit VS2010 und ich kann keinen guten Weg finden, dies zu beheben. Keine Probleme auf gcc oder clang und es würde mir das Herz brechen, die alte rohe Zeigerversion zu verwenden.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage