Entry tags:
Зодачка
Специально для любителей шОблоноф и прочих C++ наворотов. :) Сразу пердупердяю: задачка с подвохом.
Дано.
В программе есть некоторое количество классов, которые являются элементами односвязных списков с internal storage (проще говоря, это когда указатель на следующий элемент является членом класса).
Классы имеют вид:
Причем, варьируется не только название класса, но и название поля "nextListItem".
Задача.
Написать универсальную функцию вставки в начало списка с применением template, inline и pointer-to-member операторов. На входе должны быть: вставляемый элемент; указатель на первый элемент; название поля, указывающего на следующий элемент и тип класса. Функция может быть глобальной или членом namespace или функцией какого-либо нового класса - важно, чтобы она была одна, но работала для всех тех классов. Функция должна работать примерно так же, как ниже представленный #define:
Посчитать количество строк в полученной функции. Факультативно: перечислить и обосновать преимущества перед приведенным #define.
Дано.
В программе есть некоторое количество классов, которые являются элементами односвязных списков с 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.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
А то, что STL не вполне соответствует концепциям ООП, не делает его чем-то инфернальным. Оно выполняет свои задачи, и оно по-своему красиво.
no subject
а GC тут при том, что без него дико неудобно. код превращается в говно, где сосредотачиваешься не на том, как что-то сделать, а на мелких технических деталях (увы, Objective C тоже не свободен от этого).
из «всенародного» ООП нормален как раз Oberon/Component Pascal, именно в силу наличия GC.
а про жабу, си-решётку и прочие высеры не надо, это дерьмо. дерьмом оно родилось, дерьмом и живёт.
я вообще не понимаю, какого хуя в 21-м веке я должен думать, как освобождать память. отчего на меня перекладывают задачу, с которой отлично может справиться сама машина?
а STL в принципе никогда не делался в стиле ООП. это сплойт шаблонных фичей цпп, не более. оно не есть зло и адЪ (удобно, да; хотя я предпочитаю использовать классы Qt), просто сам цпп ущербен, а отсюда неизбежно ущербно и то, что на нём сделано (и даже любимая Qt, увы). вообще, внесение в язык фактически второго turing-complete языка на уровне компиляции — идиотизм. это красиво было сделано только в LISP и Forth, которые сами по себе странные. а в цэ — ужасно.
если компилятор си можно сделать, фактически, за неделю (а лисп и форт — за пару дней), то компилятор цпп — адово сложная задача, увы. что есть показатель хуёвого дизайна языка (гыгы, у него вообще дизайна не было).
no subject
а откуда машине знать, когда тебе эта память уже не нужна? если по reference counter-у, то накладные расходы.
no subject
no subject
Я понял, тебе нравится duck typing, а мне нет ;). Я люблю строгую типизацию и ворох разных кастов. И компилятор — мой юнит-тест. Шутка.
Шаблоны позволяют генерировать эффективный код (см. boost), все же C++ призван служить целям эффективности. В отличие от Obj-C, где даже inline нету.
no subject
реализацией. и шарп — свистоперделками вдобавок, которые призваны замаскировать факт его изначальной уёбищности (бля, на VM с GC нельзя нормально сделать обычную лямбду! ёбаный стыд во все поля! да-да, я знаю о немерле и прочих матанах).
>Я понял, тебе нравится duck typing, а мне нет ;). Я люблю строгую типизацию и ворох
>разных кастов.
каждой задаче своё. минимальные ядра я предпочитаю делать на чистом цэ, например. потому что скорость работы. а сверху привешивать (в зависимости от настроения) Lua, ecma-script, Scheme, и остальное писать на них. потому что удобно и быстро. у меня мозги, видимо, заточены как раз на «динамические» языки.
>см. boost
ненене, благодарю. когда я вижу софтину, где в требованиях написано «буст», я даже не читаю дальше, что она может, сразу сливаю в помойку.
>се же C++ призван служить целям эффективности. В отличие от Obj-C, где даже inline
>нету.
ыЩИТО? написал в GNU ObjC inline — получилось. ЧЯДНТ?
аааа, ты про методы, что ли? так и не может быть, тащемта. ну, то есть, может, конечно — анализ кода позволяет делать early binding, но на фэйхоа? это сразу запрещает мне изъёбы с засовыванием в поинтер совсем другого объекта (не говорю, что так надо делать, но пуркуа бы и нет? самомодифицирующийся код тоже bad practice, но ничё, работает. вон, Wolf3D был, например, гыгы).
фишка в том, что не надо думать об ObjC в понятийном поле C++
no subject
no subject
а индизайн вообще срахопиздище. его цель — собрать бабла с недоумков, не более.
за pdf же надо убивать на месте. электронные документы, блядь, делают в TeX, а не в формате, с которым ничего, окромя «распечатать» нормально сделать нельзя.
no subject
зря, кстати. пальцы в названии, конечно, настораживают, но местами там действительно встречаются полезности именно в смысле скорости.
no subject
no subject
no subject
(no subject)
(no subject)
no subject
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Если чо - это я так... в порядке стеба... на самом деле мне похуй на STL.
no subject