Uno dei miei principali reclami su C ++ è quanto sia difficile in pratica passare gli oggetti della libreria std al di fuori dei limiti della libreria dinamica (cioè dll / so).
La libreria std è spesso solo di intestazione. Il che è ottimo per fare alcune fantastiche ottimizzazioni. Tuttavia, per dll, sono spesso costruiti con diverse impostazioni del compilatore che possono avere un impatto sulla struttura / codice interno di un contenitore di libreria standard. Ad esempio, in MSVC è possibile creare una dll con il debug di iterator mentre un'altra build viene disattivata. Queste due DLL potrebbero incappare in problemi con i contenitori std in giro. Se espoziono std::string
nella mia interfaccia, non posso garantire che il codice utilizzato dal client per std::string
sia una corrispondenza esatta del std::string
della mia libreria.
Questo porta a problemi di debug, mal di testa, ecc. È possibile controllare rigidamente le impostazioni del compilatore nella propria organizzazione per prevenire questi problemi o utilizzare un'interfaccia C più semplice che non presenterà questi problemi. Oppure specifica ai tuoi clienti le impostazioni del compilatore che dovrebbero usare (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?