psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2009-07-19 06:21 pm

Зодачка

Специально для любителей шОблоноф и прочих C++ наворотов. :) Сразу пердупердяю: задачка с подвохом.

Дано.

В программе есть некоторое количество классов, которые являются элементами односвязных списков с internal storage (проще говоря, это когда указатель на следующий элемент является членом класса).

Классы имеют вид:
class MyClass...
{
   MyClass *nextListItem;


Причем, варьируется не только название класса, но и название поля "nextListItem".

Задача.

Написать универсальную функцию вставки в начало списка с применением template, inline и pointer-to-member операторов. На входе должны быть: вставляемый элемент; указатель на первый элемент; название поля, указывающего на следующий элемент и тип класса. Функция может быть глобальной или членом namespace или функцией какого-либо нового класса - важно, чтобы она была одна, но работала для всех тех классов. Функция должна работать примерно так же, как ниже представленный #define:

#define INSERT_TO_LIST(firstItemPtr, item, nextItemName) \
(item)->nextItemName= (firstItemPtr), (firstItemPtr)= (item)


Посчитать количество строк в полученной функции. Факультативно: перечислить и обосновать преимущества перед приведенным #define.

[identity profile] afa-at-work.livejournal.com 2009-07-20 07:49 am (UTC)(link)
гг
а лисп на смаллтолке пишецца в пять строк, ага.

(напевая "замыкая круг" уползает гордо распушив хвост)

Re: (в ужасе мацая подбородок)

[identity profile] afa-at-work.livejournal.com 2009-07-20 07:54 am (UTC)(link)
эмм...
сам, всё сам
начал, правда, на асме. ну не было тогда приличных доступных компов и удобных компилеров. как дотянулся - так и пришлось однажды игруху разбирать с логикой на СТ - быстренько нашел вкуснятины ага

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 07:57 am (UTC)(link)
строки, строки давай! (подготовил Squeak)

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 07:58 am (UTC)(link)
нет, даже для этого он не пригоден, увы.

Re: (в ужасе мацая подбородок)

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 07:59 am (UTC)(link)
>однажды игруху разбирать с логикой на СТ
O_O
игру с логикой на лиспе я знаю. но на смолтолке?!

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:16 am (UTC)(link)
фиг!
заныкаю!
найти надо, очень старый кусок. позже, и, возможно - у себя вывалю

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 08:21 am (UTC)(link)
это ты так намекаешь мне, что надо засовывать твою днявочку в рсс? %-)

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:21 am (UTC)(link)
ну почему.
выкинуть нахер новомодностя всякия, стл и иже. использовать молоток по назначению, вопчем. как строго типизированный асм для таймкритикал кусков. склеивать в целое нормальным языком. рубить руки желающим вылезти за пределы примитивов.

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:23 am (UTC)(link)
эмм...
нахуа, пардон май френч?
один фиг, закину на стандалонку. куда-нить сюда кину ссыль как вспомню

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 08:29 am (UTC)(link)
ну йопт. не льсти себе %-), о том, что у тебя стандалон есть, я узнал, например, вот из этого твоего камента. короче, адрес, адрес давай, ёлы-палы! %-)

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 08:31 am (UTC)(link)
так это уже просто цэ получается. нормальный цэ-компилятор (ну, gcc, например %-) отлично себе ругается на кривые типы, особенно если привыкнуть делать typedef'ы и пнуть компилятор по йайцу, дабы матерился на каждый чих.

Re: (в ужасе мацая подбородок)

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:50 am (UTC)(link)
а я помню? начала 90-х, фэнтэзятина, 8мегов файлик данных был. времен бехолдера и м&м.
один хер - лишь пинок к поиску языка дала.

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:51 am (UTC)(link)
почти цэ. более строго относится к ошибкам типов, ага. кучу ошибков вылавливаешь тупым переименованием .цэ в .цэпэпэ

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:52 am (UTC)(link)
гг
я ж сказал - где нить ссылу брошу. не в жежешечку ж код пихать, шо я мазохист шоль?

нифига!

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:54 am (UTC)(link)
без пары скобочек!

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 08:54 am (UTC)(link)
угу. и материшься на то, что void *, оказывается, не совместим с char *. как же заебало ставить перед malloc'ами (char *), ты бы знал…

кстати, с какого хуя так сделано — мне до сих пор не ясно. суть двача void * как раз в том, чтобы быть совместимым по присваиванию в обе стороны со всем.

нененене, даёшь Objective C во все поля! к тому же там объектная модель правильная, из смолтолка содраная.

[identity profile] snusmumrikkk.livejournal.com 2009-07-20 08:55 am (UTC)(link)
ООП разное бывает, не только Java-стайл. ООП в первую очередь способ мышления (как альтернатива, например, функциональному программированию), а уже во вторую очередь языковые средства. Наличие GC не имеет никакого отношения к объектно-ориентированности.

А то, что STL не вполне соответствует концепциям ООП, не делает его чем-то инфернальным. Оно выполняет свои задачи, и оно по-своему красиво.

Re: (в ужасе мацая подбородок)

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 08:56 am (UTC)(link)
фигасе. ХОТЕТЬХОТЕТЬХОТЕТЬ! нефти и интернетов тебе, если вспомнишь (хоть и ненавижу фэнтезятину).

кстате, знаю игрушку с логикой на форте. pygmy forth там. %-)

[identity profile] snusmumrikkk.livejournal.com 2009-07-20 08:58 am (UTC)(link)
Это в Objective C по-твоему ООП? Хаха :)

[identity profile] afa-at-work.livejournal.com 2009-07-20 08:59 am (UTC)(link)
я уж лучше буду материться и писать лишние звёздочки, чем нарываться на неестественный интиллехт аффтара компилера. задолбало, еси чесн, влетать в выравнивание на ровном месте и руками структуры сериализовывать.
одна из частейших конструкций была прагма алигновая, да.
и какое щасте, шо этот кошмар можно не вспоминать

[identity profile] afa-at-work.livejournal.com 2009-07-20 09:00 am (UTC)(link)
а обжектив да. вкуссный был. хоть и местами как т неудобно. цэ таки

Re: мм?

[identity profile] psilogic.livejournal.com 2009-07-20 09:02 am (UTC)(link)
friend class helper>item<;
- тут надо struct вместо class

В данном случае main должна быть объявлена friend класса item. Так что приватность все-таки срабатывает, но не там, где я думал. У меня оно работает по стечению обстоятельств - то поля public, то вызов из самого класса item. :) Надо будет придумать что-нибудь по-лучше на тот случай, когда перестанет работать.

[identity profile] psilogic.livejournal.com 2009-07-20 09:05 am (UTC)(link)
[ как же заебало ставить перед malloc'ами (char *), ты бы знал… ]

new спасет ацца демократии...

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 09:06 am (UTC)(link)
а где я про жабу говорил? я, вообще-то, целился как раз в Smalltalk и Objective C (который, как раз, считаю единственной удавшейся попыткой добавить объекты в цэ).

а GC тут при том, что без него дико неудобно. код превращается в говно, где сосредотачиваешься не на том, как что-то сделать, а на мелких технических деталях (увы, Objective C тоже не свободен от этого).

из «всенародного» ООП нормален как раз Oberon/Component Pascal, именно в силу наличия GC.

а про жабу, си-решётку и прочие высеры не надо, это дерьмо. дерьмом оно родилось, дерьмом и живёт.

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


а STL в принципе никогда не делался в стиле ООП. это сплойт шаблонных фичей цпп, не более. оно не есть зло и адЪ (удобно, да; хотя я предпочитаю использовать классы Qt), просто сам цпп ущербен, а отсюда неизбежно ущербно и то, что на нём сделано (и даже любимая Qt, увы). вообще, внесение в язык фактически второго turing-complete языка на уровне компиляции — идиотизм. это красиво было сделано только в LISP и Forth, которые сами по себе странные. а в цэ — ужасно.

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

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 09:07 am (UTC)(link)
а чем нет? ну, если учесть, что они хотели и на хуй сесть, и рыбки пожрякать.

Page 3 of 8