Una delle mie principali lamentele riguardo al C ++ è quanto sia difficile in pratica passare oggetti libreria std al di fuori dei limiti della libreria dinamica (cioè dll / so).
La libreria std è spesso solo intestazione. Il che è fantastico per fare alcune fantastiche ottimizzazioni. Tuttavia, per le DLL, sono spesso costruite con diverse impostazioni del compilatore che possono influire sulla struttura / codice interno dei contenitori di una libreria std. Ad esempio, in MSVC una DLL può compilare con il debug iteratore attivo mentre un'altra crea con esso disattivato. Queste due DLL potrebbero incorrere in problemi durante il passaggio dei contenitori std. Se espongo std::string
nella mia interfaccia, non posso garantire che il codice utilizzato dal client std::string
corrisponda esattamente a quello della mia libreria std::string
.
Questo porta a problemi di debug difficili, mal di testa, ecc. O controlli rigidamente le impostazioni del compilatore nella tua organizzazione per prevenire questi problemi o usi un'interfaccia C più semplice che non avrà questi problemi. Oppure specifica ai tuoi clienti le impostazioni del compilatore previste che dovrebbero usare (il che fa schifo se un'altra libreria specifica altre impostazioni del compilatore).
La mia domanda è se C ++ 11 ha provato a fare qualcosa per risolvere questi problemi?
DLL
s. Tra una SO
s ha sempre funzionato bene.