Программирование >>  Включение нужных заголовков 

1 ... 66 67 68 [ 69 ] 70 71


Обходное решение для 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



1 ... 66 67 68 [ 69 ] 70 71

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика