При разработке библиотеки С++ я читал, что плохой практикой является включение стандартных библиотек, таких как std::vector
в открытый интерфейс (см., например, Последствия использования std::vector в dll экспортированная функция).
Что делать, если я хочу выставить функцию, которая принимает или возвращает список объектов? Я мог бы использовать простой массив, но тогда мне пришлось бы добавить параметр count
, что сделает интерфейс более громоздким и менее безопасным. Кроме того, это не помогло бы, если бы я хотел использовать map
, например. Я думаю, что библиотеки, такие как Qt, определяют свои собственные контейнеры, которые безопасны для экспорта, но я бы предпочел не добавлять Qt в качестве зависимости, и я не хочу откатывать свои собственные контейнеры.
Какая наилучшая практика касается контейнеров в интерфейсе библиотеки? Может быть, крошечная реализация контейнера (желательно только один или два файла, которые я могу зайти, с разрешительной лицензией), которые я могу использовать как "клей"? Или существует даже способ сделать std::vector
и т.д. Безопасным через границы .DLL/.so и с разными компиляторами?