Бинарная совместимость контейнеров STL - PullRequest
5 голосов
/ 21 апреля 2011

Допустим, я пишу DLL на C ++ и хотел бы экспортировать метод, который принимает параметр std :: vector. Можно ли надеяться на бинарную совместимость между различными версиями STL?

Ответы [ 3 ]

6 голосов
/ 21 апреля 2011

Мне неизвестны какие-либо гарантии совместимости между версиями, даже между выпуском и отладкой на одном и том же компиляторе.

Одним из решений является создание оболочки для вектора. Создайте класс, в котором есть все функции, которые вам требуются из контейнера, и реализуйте их с точки зрения операций с закрытым вектором, который является единственным членом класса. Сохраните весь код класса в DLL.

4 голосов
/ 21 апреля 2011

Абсолютно нет! Вы даже не можете полагаться на совместимость одной и той же версии STL, если она была скомпилирована с другой версией того же компилятора.

3 голосов
/ 21 апреля 2011

Если вы имеете в виду между версиями, включенными в обновленные версии одного и того же компилятора, то да, он может (и будет) работать в некоторых случаях, но вы должны быть осторожны. Есть также несколько особых случаев, таких как компиляторы Intel и Microsoft для Windows - Intel очень осторожна, чтобы поддерживать двоичную совместимость, и, по крайней мере, когда я пробовал это сделать, она всегда работала довольно хорошо.

Для большинства других случаев ответ - нет.

...