Одна из моих главных претензий к C ++ заключается в том, насколько трудно на практике передавать объекты библиотеки std за пределы динамической библиотеки (т.е. dll / so).
Библиотека std часто только для заголовков. Что отлично подходит для выполнения некоторых потрясающих оптимизаций. Однако для dll они часто создаются с различными настройками компилятора, которые могут влиять на внутреннюю структуру / код контейнеров библиотеки std. Например, в MSVC одна dll может собираться с включенной отладкой итератора, а другая - без него. У этих двух библиотек могут возникнуть проблемы, связанные с передачей стандартных контейнеров. Если я представлю std::string
в своем интерфейсе, я не могу гарантировать, что код, для которого клиент использует std::string
, точно совпадает с кодом моей библиотеки std::string
.
Это приводит к трудностям при отладке, головным болям и т. Д. Вы либо жестко управляете настройками компилятора в своей организации, чтобы предотвратить эти проблемы, либо используете более простой интерфейс C, который не будет иметь этих проблем. Или укажите своим клиентам ожидаемые параметры компилятора, которые они должны использовать (что отстой, если другая библиотека указывает другие параметры компилятора).
Мой вопрос заключается в том, пытался ли C ++ 11 что-либо сделать, чтобы решить эти проблемы?
DLL
с. Между тем SO
он всегда работал просто отлично.