Я пишу библиотечную функцию, и мне действительно нужно иметь возможность передавать ей аргументы типа vectors
& maps
.
Я знаю, что вы не можете иметь функцию с параметрами STL, объявленными в заголовке библиотеки
std::map<int> FixMap( const std::map<int> & );
из-за проблем двоичной совместимости, если библиотека и исполняемый файл не были скомпилированы с одинаковыми компилятором и настройками.
С другой стороны, используя Библиотеку шаблонов Qt , следующие работы
QMap<int> FixMap( const QMap<int> & );
, хотя предоставляемая ими DLL, вероятно, была скомпилирована компилятором, отличным от моего.
Какую технику Qt использует со своими QMap
, QValueList
, QString
, чтобы преодолеть эту проблему совместимости?
Я немного прочитал их код, но не могу выделить технику.
Вопрос 1: Может ли кто-нибудь объяснить мне (возможно, через краткий обзор), как писать код, который применяет их технику?
Единственная известная мне техника, которая работает, - это предоставление string
/ map
в качестве непрозрачного указателя или использование идиомы pImpl .
Вопрос 2: можно ли использовать STLPort вместо «родных» заголовков STL для выполнения вызовов такого типа? Как это влияет на производительность STL?