Предположим, у меня есть два проекта. Одно из них является приложением, а другое - общей библиотекой, содержащей общий многократно используемый код, который может использоваться не только этим приложением.
Мое приложение использует STL, а моя общая библиотека также использует STL. Первая проблема заключается в том, что моя общая библиотека использует STL. Если я когда-нибудь добавлю в свое приложение более новую версию STL, но не буду перестраивать свою разделяемую библиотеку, поскольку в этом нет необходимости, у нас сразу же возникнут проблемы совместимости.
Моя первая мысль для решения этой проблемы - вообще не использовать STL в интерфейсе классов разделяемой библиотеки. Предположим, в моей библиотеке есть функция, которая берет строку и что-то с ней делает. Я бы сделал прототип функции похожим на:
void DoStuffWithStrings( char const* str );
вместо:
void DoStuffWithStrings( std::string const& str );
Для строк это, вероятно, будет хорошо в разных версиях STL, но недостатком является то, что мы переходим от std::string
к char*
и обратно к std::string
, что, похоже, вызывает проблемы с производительностью.
Рекомендуется ли упаковка / распаковка необработанных типов в их аналоги STL? Это становится еще хуже, когда мы пытаемся сделать это с std::list
, так как на самом деле нет «необработанного типа», о котором я знаю, что мы могли бы легко передать его как без выполнения какой-либо операции O (n) или аналогичной операции.
Какие конструкции лучше всего работают в этом сценарии? Каковы плюсы / минусы каждого?