Eine meiner Hauptbeschwerden über C ++ ist, wie schwierig es in der Praxis ist, Standardbibliotheksobjekte außerhalb der dynamischen Bibliotheksgrenzen (dll / so) zu übergeben.
Die Standardbibliothek enthält häufig nur Header. Das ist großartig, um einige großartige Optimierungen durchzuführen. Bei DLLs werden sie jedoch häufig mit unterschiedlichen Compilereinstellungen erstellt, die sich auf die interne Struktur / den Code eines Standardbibliothekscontainers auswirken können. Beispielsweise kann in MSVC eine DLL mit aktiviertem Iterator-Debug erstellt werden, während eine andere mit deaktiviertem Iterator erstellt wird. Diese beiden DLLs können Probleme beim Weitergeben von Standardcontainern verursachen. Wenn ich std::string
in meiner Benutzeroberfläche offenlege, kann ich nicht garantieren, dass der Code, für den der Client verwendet std::string
wird, genau mit dem meiner Bibliothek übereinstimmt std::string
.
Dies führt dazu, dass Probleme, Kopfschmerzen usw. nur schwer behoben werden können. Sie steuern entweder die Compilereinstellungen in Ihrer Organisation streng, um diese Probleme zu vermeiden, oder Sie verwenden eine einfachere C-Schnittstelle, die diese Probleme nicht aufweist. Oder geben Sie Ihren Clients die erwarteten Compilereinstellungen an, die sie verwenden sollen (was schade ist, wenn eine andere Bibliothek andere Compilereinstellungen angibt).
Meine Frage ist, ob C ++ 11 versucht hat, diese Probleme zu lösen.
DLL
s. Zwischendurch hat SO
es immer prima geklappt.