Название: Сопровождение кода template Отправлено: Igors от Января 08, 2015, 11:02 Добрый день
Сначала сам код Код При переходе с gcc на clang эта конструкция заклинила - сначала на компиляции, а потом на линковке (unresolved statID). Я сделал "скелетик" - переписал структуру классов в тестовый проект, вот это и есть код выше. Впрочем мне это не помогло - тестовый почему-то линкуется отлично :) Название: Re: Сопровождение кода template Отправлено: m_ax от Января 08, 2015, 17:22 Вопрос не корректен..(
Какой смысл поддерживать неработающий говнокод? И то что он когда-то и где-то там работал, не означает, что он корректен с точки зрения языка. А от такого кода нужно сразу отказываться и писать правильно) Ну о важности архитектуры и времени для неё уделяемой, я скромно промолчу) Код Так делать можно только тогда, когда размер Object<T> известен на стадии компиляции (и не зависит от T). Иначе получите зацикливание.. Название: Re: Сопровождение кода template Отправлено: Igors от Января 09, 2015, 09:17 Вопрос не корректен..( Прошу пояснить:Какой смысл поддерживать неработающий говнокод? И то что он когда-то и где-то там работал, не означает, что он корректен с точки зрения языка. А от такого кода нужно сразу отказываться и писать правильно) Ну о важности архитектуры и времени для неё уделяемой, я скромно промолчу) - чем некорректен вопрос ??? Во всяком случае это пример из реальной практики - в чем "говнокодистость"? Может Вас смутило struct - так это я написал, в оригинале там class, у каждого куча методов (даже есть virtual'ы), и все оформлено очень аккуратно. - в чем некорректность с точки зрения языка? Темплейт "на себя" - ну это даже я знаю :) Да, надо соблюдать осторожность, но так делать не запрещено. - и наконец - ну а как же писать правильно? Вот Вы объявили это говнокодом (чужую корову легко охаять), ну хорошо. Допустим (просто допустим) Вы переделали этот код, создали крепкую архитектуру, в конце-концов - работает. Приходит другой знаток, и вот, так же как Вы, уверенно заявляет: "говнокод, снести нахрен". Или Вы думаете что с Вашим кодом этого никогда не случится? Потому что он будет куда легче и прозрачнее для понимания? Я в этом сильно сомневаюсь :) --------------- Понятно почему из сотни прочитавших проголосовало лишь двое (пока) проголосовало. Неудобно выбирать "долго вникать" - выходит не знаю языка, а сказать "легко" - неправда. Лично я, посмотрев на этот код 5-10 минут не смог осознать "конструкцию" и понять (ну хотя бы примерно) что он делает. Пришлось отложить свои дела (которые я считал важными) и углубиться в изучение. Через полтора-два дня начало доходить в чем был авторский замысел. Он совсем не глуп, и даже по-своему красив. А обычно реакция переделывающего не очень приятная, напр Цитировать сука, сволочь, падла, тварь! Поймать и бить по хрюкальнику пока все темплейты не уберет! (это в литературной форме :))Название: Re: Сопровождение кода template Отправлено: Bepec от Января 09, 2015, 10:34 Ради ненужного ответа на ненужный вопрос вникать в шаблоны - нафиг надо. Попусту, без выгоды для себя, никто не любит утруждаться :)
Название: Re: Сопровождение кода template Отправлено: Igors от Января 09, 2015, 11:09 Ради ненужного ответа на ненужный вопрос вникать в шаблоны - нафиг надо. Попусту, без выгоды для себя, никто не любит утруждаться :) Ага, значит утруждаться придется (еще и как) - так почему же Вы не нажали заготовленную бубочку "придется долго вникать", а вместо этого свистите про "ненужный" ответ/вопрос ? :) ------- Код этот вполне успешно работал. Др программисты (в том числе и я) просто "юзали" его не вникая в подробности - в основном нужно было создавать контейнеры и добавлять в них эл-ты нужного типа, это делалось "по образцу" имеющегося кода. Расширение "инстанциации" (напр Object_C, Layer <Object_C>) не понадобилось ни разу. Зато неск других задач (гораздо бОльших) используют эту структуру как базовую. Поэтому снести/переписать ее практически нереально. Название: Re: Сопровождение кода template Отправлено: m_ax от Января 09, 2015, 13:13 Цитировать Прошу пояснить: Поясняю:Цитировать - чем некорректен вопрос Вы предлагаете поддерживать и сопровождать неработающий код. Какой в этом смысл?Цитировать - в чем "говнокодистость"? Ну хотя бы в том, что он не работает) Потом, объясните смысл этой конструкции и как она в реальном коде используется: Код
Цитировать - и наконец - ну а как же писать правильно? Вообще или конкретно здесь?Поскольку я не знаю всего, что за этим кодом скрывается и как это используется, то что-либо посоветовать не могу) Попробуйте заменить это Код
на Код
Название: Re: Сопровождение кода template Отправлено: Bepec от Января 09, 2015, 13:31 А не ответил на опрос потому, что даже не пробовал его рассмотреть. Следовательно любой мой вывод будет недоказанным и необосновенным :)
Название: Re: Сопровождение кода template Отправлено: Igors от Января 10, 2015, 09:06 Вы предлагаете поддерживать и сопровождать неработающий код. Какой в этом смысл? Откуда такой вывод? См первый пост: ... Ну хотя бы в том, что он не работает) При переходе с gcc на clang эта конструкция заклинила Ну знаете, если при каждой template-проблеме компилятора (а они сыпятся как из ведра), я стану "переписывать все"...Потом, объясните смысл этой конструкции и как она в реальном коде используется: ID обеспечивает глобальный список объектов, по ID можно получить Object и наоборот. Если объект удален из глобального списка (или еще в него не вставлен), то его ID == statIDКод
Название: Re: Сопровождение кода template Отправлено: m_ax от Января 10, 2015, 17:05 А в классе ID<T> где-нибудь ещё используется class T и если да, то как?
Название: Re: Сопровождение кода template Отправлено: Igors от Января 10, 2015, 17:31 А в классе ID<T> где-нибудь ещё используется class T и если да, то как? Да. конечноКод Ну и перекрытые операторы -> и др (в стиле шаред пойнтера) Название: Re: Сопровождение кода template Отправлено: _Bers от Января 21, 2015, 20:58 Код: struct Object_A : public Object<Object_A> зацикливание.. Нет никакого зацикливания. Есть нюансы, но в целом ничего особенного. Довольно распространенная практика. Самый большой косяк, который здесь может вылезти: вижал студия жрет только в путь. Гцц/шланги могут обидиться, если базовый шаблон тронет лишнее. Но это будет вполне себе читабельная ошибка компилятора, а не "зацикливание". Код: template <class T> Пишите проще: Код: template <class T> И раз уж пошла телега за шаблоны, тогда уж сразу по уму: Код: template <class T> |