Jedną z moich głównych skarg na C ++ jest to, jak trudno w praktyce przekraczać obiekty biblioteki standardowej poza granicami biblioteki dynamicznej (tj. Dll / so).
Biblioteka std jest często tylko nagłówkiem. Co jest świetne do robienia niesamowitych optymalizacji. Jednak w przypadku bibliotek DLL często są one budowane z różnymi ustawieniami kompilatora, które mogą wpływać na wewnętrzną strukturę / kod kontenerów biblioteki standardowej. Na przykład w MSVC jedna biblioteka DLL może się kompilować z włączonym debugowaniem iteratora, podczas gdy inna kompilacja jest wyłączona. Te dwie biblioteki dll mogą napotykać problemy z przekazywaniem standardowych pojemników. Jeśli ujawniam się std::string
w interfejsie, nie mogę zagwarantować, że kod, którego używa klient, jest std::string
dokładnie zgodny z kodem mojej biblioteki std::string
.
Prowadzi to do trudnych problemów z debugowaniem, bólów głowy itp. Albo sztywno kontrolujesz ustawienia kompilatora w swojej organizacji, aby zapobiec tym problemom, albo używasz prostszego interfejsu C, który nie będzie miał takich problemów. Lub określ swoim klientom oczekiwane ustawienia kompilatora, których powinni użyć (co jest do bani, jeśli inna biblioteka określa inne ustawienia kompilatora).
Moje pytanie brzmi, czy C ++ 11 próbował zrobić coś, aby rozwiązać te problemy?
DLL
s. Pomiędzy SO
s zawsze działało dobrze.