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] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:10 am (UTC)(link)
ты буст читал? я читал. хорошо, что в дурке я уже был.

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:11 am (UTC)(link)
ненене, проще самому написать. если НАСТОЛЬКО понимаешь шаблоны, и Александреску для тебя — банальность, то хули. а если нет — то кури пока не ебанёшься, а толку ноль.

[identity profile] psilogic.livejournal.com 2009-07-20 11:18 am (UTC)(link)
какие признания :))))

после кода некоторых моих знакомых программеров буст - это ничего так...

[identity profile] psilogic.livejournal.com 2009-07-20 11:19 am (UTC)(link)
шаблоны простые на самом деле, только у них синтаксис неудачный, ненаглядный

[identity profile] psilogic.livejournal.com 2009-07-20 11:21 am (UTC)(link)
ссылку съел, четаю, просвещаюсь
похоже на то как в цермело-френкеле все выражается через упорядоченные пары

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:23 am (UTC)(link)
когда «въехал» — любая вещь простая. вопрос в пороге вхождения. вот я уже полтора года пытаюсь «въехать» в emacs, например. хуя.

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:24 am (UTC)(link)
>какие признания :))))
а то! я шизофреник, у меня справка есть! настоящая!

>после кода некоторых моих знакомых программеров буст — это ничего так…
не читайте перед обедом советских газет (ц)

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:30 am (UTC)(link)
ну, немерле — это матан. такой же, как хацкель, тащемта.

[identity profile] psilogic.livejournal.com 2009-07-20 11:34 am (UTC)(link)
ну вот в шОблоны въехать можно на раз-два.

представь себе, что у тебя

1. есть функции, в которых в качестве параметра передается тип (или типы). это шаблонные функции.

2. есть классы, декларация и имплементация которых зависит от параметров (параметр опять же тип, но может быть и нечто константное)
это шаблонные классы.

вот собсна и все, осталось только тупо зазубрить уебищный синтаксис для передачи тех параметров. но если тебе понятен синтаксис LISP-а... гы... :)

в шоблонах, кстати, есть нечто лямбдаобразное... шоблон шоблона отнаследованный от шоблона... со сторонней функцией-шоблоном... ;)

[identity profile] psilogic.livejournal.com 2009-07-20 11:36 am (UTC)(link)
это не матан, это теория множеств - матлогика. чёрч изъебнулся :)

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

(закукливается в iddqd)

[identity profile] afa-at-work.livejournal.com 2009-07-20 11:37 am (UTC)(link)
ххе!
свысока смотрит на сквик: хоть п гуйню присобачили шоль вместо доснавигаторской попугаистости!

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

[identity profile] psilogic.livejournal.com 2009-07-20 11:46 am (UTC)(link)
нет, динамическая типизация тут ни при чем. для динамической типизации есть virtual функции.

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

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:51 am (UTC)(link)
работодателю в 90% случаев похуй, что и как внутри — его интересует результат.

Re: (закукливается в iddqd)

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

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:52 am (UTC)(link)
всё это матан. а кто не знает матан, тот будет переработан в метан! %-)

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:54 am (UTC)(link)
>для динамической типизации есть virtual функции.
ЛОЛЩИТО?! O_O

алсо, генерики, генерики же! а шаблоны — это ебанутая надстройка над препроцессором.

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

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:56 am (UTC)(link)
ой, да знаю я, знаю… не будь занудным, /b/ратья осуждают! %-)

[identity profile] afa-at-work.livejournal.com 2009-07-20 11:57 am (UTC)(link)
дык и сказал. выложить на стол.

[identity profile] http://technorati.com/people/technorati/ketmar (from livejournal.com) 2009-07-20 11:58 am (UTC)(link)
кстате, очень не хватает в цэ closures и continuations.

[identity profile] psilogic.livejournal.com 2009-07-20 11:58 am (UTC)(link)
[ ЛОЛЩИТО ]

а щито? у тебя переменная-указатель, которая указывает на данные неизвестного (на этапе компиляции) типа. чем не динамическая типизация?

[ шаблоны — это ебанутая надстройка над препроцессором. ]

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

[identity profile] psilogic.livejournal.com 2009-07-20 11:59 am (UTC)(link)
ну мне же тоже хочеца иногда выложить на стол хвост... =))

Re: (закукливается в iddqd)

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

Page 6 of 8