LINUX.ORG.RU

[c++] Meyers. Effective STL

 


0

0

Читал сабж.

Раздел про алгоритмы читать без слез невозможно.

Автор агитирует за использование стл алгоритмов
вместо тупых циклов (типа гут), и тут же в качестве
примера приводит вот такой у***щный ужас:

// find the first value val where the
// "and" of val > x and val < y is true
vector<int> iterator i =
find_if(v.begin(), v.end(),
compose2(logical_and<bool>(),
bind2nd(greater<int>(), x),
bind2nd(less<int>(), y)));

При этом один из основных аргументов в пользу
использования стл алгоритмов состоит в том что
написать это в виде цикла с итераторами и не
ошибиться еще сложнее. Потому что итераторы
устроены так, что то, что с первого раза напишет
любой нормальный человек, будет работать неправильно


discuss

(оринигал тут http://www.ddj.com/cpp/184401446)

anonymous

Ответ на: комментарий от tailgunner

>>>Ну то есть ты тоже пришел к выводу о том, что без компиляции по некторому описанию не обойтись? В Си++ так и делается, что не устраивает-то? :D

>>То, что библиотека и ее клиент в реальном мире всегда работают на разных версиях протокола,

>"Наша песня хороша, начинай сначала" (c) Если у них разные версии протокола, то они, в общем случае, не смогут работать вместе. Это что, непонятно?

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

Absurd ★★★
()
Ответ на: комментарий от Absurd

> При замене ядра линукса пересобирать весь софт не приходится, однако в новом ядре обычно есть новые фичи, т.е протокол взаимодействия с юзерспейсом новый.

И что? Это специальный случай, совместимое расширение протокола. _Специально спроектированное_, чтобы не ломать уже имеющихся "клинтов". Такое возможно и в Си++, и везде.

Впрочем, если хочешь поиграться определениями - изволь: новая версия ядра поддерживает на самом деле _2 протокола_ - старый и новый.

tailgunner ★★★★★
()
Ответ на: комментарий от jtootf

>>Что параметризуемо? Мы имеем только те типы, которые получаются извне и отправляются вовне. Других нет.

>что за бред? система, состоящая из одного уровня абстракции? это что, hello world?

Абстракция в контексте C++ это что - класс? Ну так если его параметризовать, то придется его .h файл положить. Если так сделать со всеми классами, то получится экспоненциальное раздувание зависимостей внутри проекта. Если не со всеми, то типы использованные в непараметризованных классах будут зафиксированы, и по факту мы будем иметь дело с множеством типов, использованных в непараметризованных классах.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>Абстракция в контексте C++ это что - класс?

отсыпай

>Ну так если его параметризовать, то придется его .h файл положить

да

>Если так сделать со всеми классами, то получится экспоненциальное раздувание зависимостей внутри проекта. Если не со всеми, то типы использованные в непараметризованных классах будут зафиксированы, и по факту мы будем иметь дело с множеством типов, использованных в непараметризованных классах.

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

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>>Абстракция в контексте C++ это что - класс?

>отсыпай

А что - класс это абстракция, скрывающая от пользователя ньюансы работы с некоей подсистемой.

>есть одно простое и приятное правило - параметризовать только то, что параметризовать нужно.

Нет, там ситуация похожа на ситуацию с const - либо весь код должен использовать const, либо весь код не должен использовать const так как код в основе написан человеком не использующим const и внесение const в конечном итоге вынудит переписать весь проект. Так и с шаблонами - одна шаблонизация приводит к шаблонизации смежного кода.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>А что - класс это абстракция, скрывающая от пользователя ньюансы работы с некоей подсистемой

тут спорить сложно. а что, больше возможностей создавать абстракции в C++ нет?

>Так и с шаблонами - одна шаблонизация приводит к шаблонизации смежного кода

ещё раз: у тебя сильно притянутый за уши пример. если там всё ТАК плохо, то надо просто всё переписывать к собачьим монахам, и ругать не C++, а архитектов этого поделия

jtootf ★★★★★
()
Ответ на: комментарий от tailgunner

>Если ты не заметил, ветеран PHP-кодирования

Не судите по нику о человеке. Во-первых, я не ветеран вообще. Во-вторых, не пишу на PHP. (Программист на С++ я, сюрпиз-сюрприз!)

>предложил использовать STL без итераторов %)

Это где я такое предложил? Вот цитата:

>Не нравится использовать алгоритмы -- не используй. Не нравятся итераторы -- не используй.

Вы, наверное, меня неверно поняли и/или интепретировали..

php-coder ★★★★★
()
Ответ на: комментарий от php-coder

>Не судите по нику о человеке. Во-первых, я не ветеран вообще. Во-вторых, не пишу на PHP. (Программист на С++ я, сюрпиз-сюрприз!)

зато по этой фразе сразу видно, что ты _идиот_

anonymous
()
Ответ на: комментарий от php-coder

никакой ты не программист -- ты кодер

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.