Обходное решение для MSVC4-5
Обходное решение для MSVC4-5
Еще раз посмотрим на правильный код, который не компилируется для реализации STL из поставки MSVC4-6:
vector<Widget> vw(begin,end);// Отвергается реализацией STL
// из поставки MSVC4-6
list<Widget> lw;
lw.assign(vw.rbegin(),vw.rend());// То же
SpeciаlContainer<Widget> scw;
scw.insert(scw.end(),lw.begin(),lw.end()); // То же
// Создать итераторы begin и end
// для чтения объектов Widget
// из cn (см. совет 6).
// Прочитать объекты Widget
// из cin в vw (см. совет 6)
// не компилируется в MSVC4-6!
Несмотря на внешние различия, выделенные вызовы отвергаются компилятором по одной и той же причине: из-за отсутствия шаблонов функций класса в реализации STL. Соответственно и решение во всех случаях оказывается одним и тем же: замена вызовом сору с итератором вставки (см. совет 30). Ниже приведены обходные решения для всех примеров, приведенных ранее:
istream_iterator<Widget> begin(cin).end:
vector<Widget> vw(begin,end); //Создать vw конструктором
copy(begin,end,back_inserter(vw));//по умолчанию и скопировать
//в него объекты Widget из cin
list<Widget> lw;
lw.clear(); //Удалить из lw старые объекты:
copy(vw.rbegin(),vw.rend(),//скопировать объекты из vw
back_inserter(lw))://(в обратном порядке)
SpecialContainer<Widget> scw;
copy(lw.begin().lw.end().// Скопировать объекты Widget
inserter(scw.scw.end()));// из lw в конец sew
Я рекомендую использовать эти обходные решения с библиотекой, входящей в комплект поставки MSVC4-5. С другой стороны, будьте внимательны и не забывайте о том, что эти решения являются обходными. Как показано в совете 5, алгоритм сору почти всегда уступает интервальной функции контейнера, поэтому как только представится возможность обновить платформу STL до версии с поддержкой шаблонов функций класса, откажитесь от использования сору в тех местах, где следовало бы использовать интервальные функции.