|
Программирование >> Включение нужных заголовков
Обходное решение для MSVC6 219 Несмотря на внешние различия, выделенные вызовы отвергаются компилятором по одной и той же причине: из-за отсутствия шаблонов функций класса в реализации STL. Соответственно и решение во всех случаях оказывается одним и тем же: замена вызовом сору с итератором вставки (см. совет 30). Ниже приведены обходные решения для всех примеров, приведенных ранее: istreamJterator<Widget> begin(cin).end: vector<Widget> vw(begin.end): Создать vw конструктором copy(begiп.end,backjnserter(vw)): no умолчанию и скопировать в него объекты Widget из cin list<Widget> Iw; Iw.clearO; Удалить из Iw старые объекты; copy(vw.rbeginO.vw.rendO. скопировать объекты из vw back 1nserter(lw)); (в обратном порядке) SpecialContainer<Widget> sew: copyClw.beginO.Iw.endO, Скопировать объекты Widget inserterCscw.scw.endO)); из Iw в конец sew Я рекомендую использовать эти обходные решения с библиотекой, входящей в комплект поставки MSVC4-5. С другой стороны, будьте внимательны и не забывайте о том, что эти решения являются обходными. Как показано в совете 5, алгоритм сору почти всегда уступает интервальной функции контейнера, поэтому как только представится возможность обновить платформу STL до версии с поддержкой шаблонов функций класса, откажитесь от использования сору в тех местах, где следовало бы использовать интервальные функции. Обходное решение для MSVC6 Обходное решение из предыдущего раздела подходит и для MSVC6, но в этом случае существует и другой вариант. Компиляторы MSVC4-5 не обладают полноценной поддержкой шаблонов функций класса, поэтому отсутствие этих шаблонов в реализации STL несущественно. В MSVC6 дело обстоит иначе, поскольку компилятор этой среды поддерживает шаблоны функций класса. Таким образом, возникает естественное желание заменить реализацию STL из поставки MSVC6 другой реализацией с шаблонами функций классов, предписанными Стандартом. В совете 50 упоминаются свободно распространяемые реализации STL от SGI и STLport; в списках поддерживаемых компиляторов обеих реализаций упоминается MSVC6. Кроме того, можно приобрести новейшую MSVC-совместимую реализацию STL от Dinkumware. У каждого из этих вариантов есть свои достоинства и недостатки. Реализации SGI и STLport распространяются бесплатно, поэтому какая-либо официальная поддержка в этих случаях попросту отсутствует. Более того, поскольку реализации SGI и STLport рассчитаны на работу с разными компиляторами, вам придется дополнительно настроить их для обеспечения максимального быстродействия в MSVC6. В частности, может потребоваться включение поддержки шаблонов функций классов - из-за совместимости с большим количеством 220 Приложение Б Замечания по поводу платформ STL от Microsoft разных компиляторов в SGI и/или STLport эта поддержка отключена по умолчанию. Возможно, также придется позаботиться о компоновке с другими библиотеками MSVC6 (особенно DLL), проследить за использованием соответствующих версий для отладки и т. д. Если подобные вещи вас пугают или вы руководствуетесь принципом бесплатные программы обходятся слишком дорого , рассмотрите альтернативную реализацию STL для MSVC6 от Dinkumware. Библиотека проектировалась с расчетом на максимальную простоту замены и на соответствие Стандарту. Реализация STL из MSVC6 разрабатывалась именно в Dinkumware, поэтому вполне возможно, что новая реализация STL действительно легко заменяет оригинал. За дополнительной информацией о реализациях STL от Dunkumware обращайтесь на сайт компании http: www.dunkumware.com. Независимо от того, на какой реализации вы остановите свой выбор, вы получите нечто большее, чем STL с шаблонами функций классов. В альтернативных реализациях будут решены проблемы соответствия Стандарту в других областях - скажем, отсутствие объявления push back в контейнере string. Более того, в вашем распоряжении окажутся полезные расширения STL, в том числе хэшированные контейнеры (см. совет 25) и односвязные списки (контейнер si ist). Реализации SGI и STLport также содержат множество нестандартных классов функторов, включая selectlst и select2nd (см. совет 50). Но даже если вы вынуждены работать с реализацией STL из поставки MSVC6, сайт Dunkumware все же стоит посетить. На нем перечислены известные ошибки в реализации библиотеки MSVC6 и приведены рекомендации относительно того, как модифицировать библиотеку для сокращения ее недостатков. Не стоит и говорить, что редактирование заголовочных файлов библиотеки - дело весьма рискованное. Если у вас возникнут проблемы, не вините в них меня. Алфавитный указатель accumulate, 146 начальное значение, 147 объекты функций, 150 побочные эффекты, 149 adjacent difference, 146 advance, 116 allocator, 57 argument type, 158 auto ptr, 48 back insert iterator, 197 backjnserter, 123,197 basic ostream, 208 basic string, 18, 192 begin/end, связь с rbegin/rend, 117 binary function, 158 binary search, 177 bindlst, 197 bind2nd, 197 bitset как альтернатива vector<booI>, 82 принадлежность к STL, 16 Boost, 165,201 С++, Стандарт, 24, 67,202 capacity, 69 cliarjraits, 192,208 class, сравнение с typename, 20 compose 1, 200 compose2, 172 constjterator преобразование к iterator, 112 сравнение с iterator, 112 const reverseJterator, 111 copy, 36 copy if, 145 count, 146,177 delete, 66 deque, 24,82 Dinkumware, 109,199,219 distance объявление, 116 эффективность, 117 Emacs, 36 empty, 33 equal range, 177 equal Jo, 86,108 erase, 41,50,131 erase/remove, идиома, 50,135 find, 177 first argumentjype, 158 foreach, 149 frontjnsertiterator, 197 frontJnserter, 124,197 identity, 200 includes, 139 inner product, 146 inplacemerge, 139 insert, 41,97,105 insert Jterator, 197 insert sft:er, 198 inserter, 124, 197 istreamjterator, 147, 191 istreambufjterator, 147, 191 key comp, 85,106 less, 191 Iess equal, 91 IexicographicaI compare, 143 Ihs, имя параметра, 21 list merge, 174 remove, 134 sort, 130 splice, 56 unique, 135
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |