Войти
ПрограммированиеФорумОбщее

Прозрачность кода в C++ (19 стр)

Страницы: 116 17 18 19 20 21 Следующая »
#270
2:56, 9 июля 2009

Конишуа
> С тимплитами, код решения начинает казаться более важным (и ценным) чем сама
> задача .
> Тоже самое происходит, когда пытаются сделать универсальный код, подходящий на
> все случаи жизни

вот и нет, темплейты способствуют банальной копипасте
куда уж там важность, приходится прятать гордость и заниматься этим самым : )

код обобщённый, компактный, но, сука, какая-нибудь специализация отличается всего лишь на полстрочки и что прикажете делать?

навеяно сегодняшним
задачка алгоритмически очень тупая
есть инвентори, в котором предметы имеют привязку к слотам
надо добавить предмет
и назначить ему свободный слот

на примере:
есть линейный контейнер (допустим макс размерности 8) где подряд лежат

slot6|slot3|slot7|slot2|slot5|slot0|slot1

надо быстро понять, что можно назначить оставшийся slot4
понятно, что инвентори не всегда забито вот так впритык

мои действия были таковы, за 5 минут я понял, что "на бля" это не решается
решил переложить задачку на программера, кодящего с вызывающей стороны, мол пусть он мне пришлёт предмет и номер слота
через 10 минут он подходит и говорит, что с таким пустяком я и сам могу справиться
коллега за соседним столом советует std::set
у меня очередное пятиминутное колебание между написанием алгоритма и малознакомым set
думаю, ладно, хрен с ним, в сете всё отсортировано и свободное место находится за один проход
после чего следует замена контейнера list (частые вставки и удаления) на set
код не компилится
сломалась моя сериализация
в set нет push_back()
ладно, смотрю что там есть, добавляю insert (cont.end(), item), вот оно отличие, для которого пришлось добавить (копипастой) две специализации на сериализацию/десериализацию
код не компилится
почему-то вызывается самый общий шаблон, и для xml сериализации ошибка тонет где-то в boost::lexical_cast()
смотрю опять на set
у него три параметра шаблона, когда у всех "нормальных" контейнеров по два
понимаю, что придётся копипастить существующие специализации добавив посерёдке class=std::less<T>
повторяю тоже самое для методов, специализирующих POD и "сложные" типы со своим serialize(), как вы помните сериализация/десериализация
тут же, уловив суть проблем, делаю тоже самое для бинарной сериализации
код не компилится
компилятор выдаёт некую простыню, из которой, я уже намётанным глазом, вытаскиваю жалобу на нарушение константности
тут я 5 минут в прострации
потом вспоминаю, что ключ в map и вероятно по аналогии в set должен быть константный
нахожу места, куда надо вляпать const_cast()
слава богу компилится
тут есть важный момент, компилится - значит будет работать, можно говорить абсолютно уверенно, даже не запуская в рантайм
смотрю
было добавлено порядка 10 специализаций
думаю
если придётся добавлять std::map, у которго четыре параметра шаблона, отдельно ключ, отдельно данные...
то ну его в задницу
займусь тогда лучше алгоритмистикой : )))


#271
5:31, 9 июля 2009

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

#272
8:55, 9 июля 2009

могу даже накатать простенький примерчик если нужно)

#273
9:27, 9 июля 2009

Z
Цикл более ясен, когда применим, то есть, во втором случае.

О. Федор
Красивое решение на шаблонах :) Но не простое, менее понятное и менее стабильное - факт. Твое утверждение
>Но прогер, пишущий более простой и не менее эффективный код для решения той же задачи несомненно более квалифицирован.
остается относительным.

#274
10:34, 9 июля 2009

Устроили холливары. Юзать надо то, что оптимальнее. А что оптимальнее каждый решает для себя.
Если Z нравится всё писать через функции,пущай пишет
Если О. Федор разве что оргазм не получает от шаблонов, пущай пишет.

Лично я всегда использую шаблоны, если они действительно приносят пользу, но таких случаев почти нет.
Видимо я тупее О. Федор, ну да пофигу. Лучше делом займитесь. Всё равно каждый останется при своём мнении.
Ну а лет через 10-15 узнаем кто прав по его проектам

#275
10:40, 9 июля 2009

Rrrrr
А через 10-15 лет правыми окажутся хаскеллисты!

#276
10:45, 9 июля 2009

Rrrrr сидят в комнате парни, разговаривают, приоткрывая дерь в комнату заходит мужик, говорит "вы все лохи", закрывает дверь и уходит =)

#277
11:38, 9 июля 2009

писать надо так как говорит кодстандарт и лид)

#278
11:49, 9 июля 2009

kas
> писать надо так как говорит кодстандарт и лид)

Видать ты не сталкивался с ситуацией, когда лид в упор не видел что можно серьёзно  облегчить и упростить код :)

С гигантским switch не сталкивался ? :)

#279
11:54, 9 июля 2009

отписался - тема зациклилась =)

#280
12:23, 9 июля 2009

innuendo
> С гигантским switch не сталкивался ? :)
когда парсер писал свитч больше сотни был, как упростить?

#281
12:31, 9 июля 2009

innuendo
> Видать ты не сталкивался с ситуацией, когда лид в упор не видел что можно
> серьёзно облегчить и упростить код
Писать через голову лида - лучше сразу уволится и не заниматся херней.

#282
12:41, 9 июля 2009

Z
> Писать через голову лида - лучше сразу уволится и не заниматся херней.

Причем здесь это ?  Я хотел показать kas что лид не всегда принимает удачные решения :)

Я смотрю, Вы с  kas как братья акробаты - Друг за друга стеной :)

#283
12:43, 9 июля 2009

ashujon
> когда парсер писал свитч больше сотни был, как упростить?

Чего парсер ? Ты по граматике посмотри, как идёт разбор сверху вниз. Или у тебя снизу вверх ?

#284
12:59, 9 июля 2009

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

Страницы: 116 17 18 19 20 21 Следующая »
ПрограммированиеФорумОбщее