Однією з моїх головних скарг на C ++ є те, наскільки важко на практиці передавати std бібліотечні об'єкти поза динамічними межами бібліотеки (тобто dll / so).
Бібліотека std часто використовується лише в заголовку. Що чудово підходить для отримання дивовижних оптимізацій. Однак для DLL вони часто будуються з різними налаштуваннями компілятора, які можуть впливати на внутрішню структуру / код контейнерів бібліотеки std. Наприклад, у MSVC один dll може будуватись із налагодженням ітератора, тоді як інший будується з ним. Ці два dll можуть зіткнутися з проблемами, передаючи std-контейнери навколо. Якщо я експоную std::string
в своєму інтерфейсі, я не можу гарантувати, що код, який використовує клієнт, є std::string
точною відповідністю моєї бібліотеки std::string
.
Це призводить до важких проблем налагодження, головних болів тощо. Ви або жорстко керуєте налаштуваннями компілятора у вашій організації, щоб запобігти цим проблемам, або використовуєте простіший C-інтерфейс, у якого цих проблем не буде. Або вкажіть для своїх клієнтів очікувані налаштування компілятора, які вони повинні використовувати (що виходить, якщо інша бібліотека визначає інші настройки компілятора).
Моє запитання - чи намагався C ++ 11 зробити щось для вирішення цих питань?
DLL
с. Між SO
s завжди було добре.