| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Условия успешной компиляции STL разными компил. |
| Автор: EnergoHokum 4.5.2008, 09:06 | ||
Хочу спросить: какие действия нужно предпринять (и нужно ли), чтобы код с использованием STL компилировался разными компиляторами (если он будет ещё и работать -- вообще идеально). То-есть, если я собираю GCC-ом вот такое,
будет ли оно нормально работать под MSVC, на разных платформах (x86-32, x86-64)? Что нужно сказать компилятору (выравнивание, проч.)? |
| Автор: Daevaorn 4.5.2008, 10:02 |
| 100% гарантий дать не возможно. А условий всего 2: - код должен быть как можно более близок к стандарту - компилятор должен быть как можно более соответствующий стандарту |
| Автор: EnergoHokum 4.5.2008, 10:15 |
| То-есть "опыт, сын ошибок трудных"? Мне предлагают преобразовать эту мультикарту в массив C-строк и передавать указатель на него, но мне такое "решение" не нравится сильно. |
| Автор: vinter 4.5.2008, 10:39 | ||
будет |
| Автор: just_geek 4.5.2008, 10:59 |
| Лучше перестраховатся и воспользоватся STLport'ом. |
| Автор: JackYF 4.5.2008, 11:42 |
| Блин, да что в этом элементарном коде может не скомпилиться? При условии, что MSVC >= 7.0, проблем быть не должно 99,9%. |
| Автор: EnergoHokum 4.5.2008, 12:27 |
| Я немного неправильно понял условия (и, соответственно, выразился). Правильнее так: если код, передающий мультикарту, скомпилирован одним компилятором (пусть MSVC), а принимающий -- другим (MinGW-GCC)могут-ли различия в реализациях STL-евских контейнеров испортить мне жизнь? Как я помню, на именно реализацию контейнеров ограничения не накладываются. |
| Автор: vinter 4.5.2008, 14:14 |
| JackYF, поведение контейнеров стандартизировано. И его методы будут вести себя что в гцц что в мцц, одинаково. Реализация контейнера по моему волновать юзера должна ровно настолько, насколько обычного жителя города волнует проблема надоев в Псковской губернии. |
| Автор: EnergoHokum 4.5.2008, 14:48 |
| To vinter: На RSDN-е есть руководство по STL, написанное Степановым и Ли, там приводится примеры для контейнеров, в частности для std::multimap. Эти примеры являются эталонной реализацией, или контора-производитель (КПр) может их корёжить по своему? Другими словами, КПр может добавить/урезать какие-нить внутренние служебные переменные контейнера? Функции? |
| Автор: JackYF 4.5.2008, 15:51 | ||
Поведение, но не бинарное представление, которое при передаче параметров будет давать феерические глюки.
Конечно, может, и даже очень нужет |
| Автор: EnergoHokum 4.5.2008, 16:03 |
| То-есть, получается, что для корректной передачи содержимого контейнеров разных КПр мне нужно вручную вынуть это содержимое из одного контейнера, и так-же вручную затолкать в другой (STLPort не рассматриваем)? |
| Автор: vinter 4.5.2008, 17:51 | ||
а причем тут бинарное представление? мы его по битам разбираем используя конкретные смещения? мы используем интерфейс, который будет работать всюду. Если я не прав, то приведи пример. |
| Автор: mes 4.5.2008, 18:19 | ||
При использовании двух описаний класса (а в случае с двумя компиляторами иного предполагать не логично) - смещения будут подсчитаны по разному ( хотя бы если переменные стоят не в том порядке). Чтоб избежать проблем между передачей данных между одинаковыми классами разных описаний можно: 1. использовать "чистые" абстрактные классы 2. передавать данные как с-блок 3. использовать общий прокотол передачи данных. |
| Автор: vinter 4.5.2008, 18:22 |
| все понял о чем вы mes, JackYF, +1 |