![]() |
|
Модераторы: LSD Страницы: (59) « Первая ... 54 55 [56] 57 58 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
MAKCim, то полиморфизм можно сделать и для шаблоных классов я в курсе,
имхо я имел ввиду немного другое -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Beltar |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
А может тогда определимся с терминологией. ИМХО любая обработка кода перед компиляцией есть препроцессинг и какие он там методы использует мне побоку. Я лично считаю его злом.
Более сложных средств она не требует.
Есть 2 типа компиляторов (по крайней мере в Windows), те у которых есть IDE и те, которые никто не использует. Кстати, столь любимая Майкрософт Венгерская нотация, небесполезная в Turbo C, Turbo Pascal, или в распечатке, в Delphi превращается в самую настоящую Трансильванскую ересь, т. к. тип переменной можно узнать просто наведя на нее мышь.
А чем оптимизация явно описанных функций, отличается от оптимизации автоматически генерируемых? На кники ссылаться не надо, мне интересно, как ты мне это объяснишь. А ссылку на книги я воспринимаю только как неспособность возразить.
Пользуйся. Но тут прозвучало утверждение, что в С++, строки лучше, чем в Delphi. Я жду пояснений чем они лучше, а то я в каждой программе ANSIString юзаю и еще ни разу не быо такого, чтобы мне чего-то не хватало. Насчет разумных программистов. Ты как считал, тех кто работает, или еще и тех кому зачет надо? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||||||
|
|||||||||||
| Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 5 Всего: 70 |
Вот пример кторый привел MAKCim невозможно сделать никаким препроцессором. Ты не понимаешь, что есть что, но при этом споришь. Ужас. Потому что шаблоны это не только подстановка. Ты вообще шаблоны понимаешь? Вот объясни, что делает код который привел MAKCim?
Отмотай с десяток страниц назад, я там это доказал и привел примеры кода.
Для тех кто думает, а не кнопки на формы кидает. |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 8 Всего: 207 |
1. Не являются частью языка 2. Класс-шаблон (параметризация и пр.) Шаблоны != препроцессинг, т. к парсинг шаблонов осуществляется компилятором Препроцессинг - "тупая" подстановка текста, шаблоны - "умная" манипуляция с типами -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
Вот для раздумий любителей си
исходник игры шахматы , где то на просторах нета вытащил
правда у мя компилится не захотел видать гдето порезали исходник -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Beltar |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Daevaorn
Только часто ли подобное нужно.
Для меня с точностью до наоборот.
Мне это абсолютно все равно. Хотя можно и перед компиляцией сгенерить препроцессором шаблонную функцию. Меня интересует автоматическая генерация кода и шаблон, как бы он там не реализовывался, я сначала считал хорошей вещью, но потом передумал.
Я обратил внимание только на использование нескольких типов, а что он делает мне побоку.
Да, я предпочитаю, покидать на форму основные компоненты интерфейса, а потом постепенно писать свои килобайты кода, не вылезай из редактора с отладчиком а вы сидите с компиляторами без IDE. PS Объяснения оптимизации не увидел. Добавлено @ 00:53
Это не конкурс на самую запутанную программу? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||||||||
|
|||||||||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 5 Всего: 70 |
Всё ясно, ты тот код просто не понял. Тогда вести с тобой разговор по поводу шаблонов не имееет смысла - ты их не знаешь. Зачем тогда спорить? Не понятно. Я уже говорил про статический полиморфизм. Но ты и его видимо не знаешь. Жаль. да, мы компоненты никуда не кидаем, мы деньги зарабататываем. попробуй, может и тебе понравится. |
|||
|
||||
| Beltar |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Я его и не просматривал.
Скажем так, я и термина-то такого не слышал.
Ну это потому что в VS такого понятия как компонент нету. Есть классы библиотек MFC и ATL. А кнопка и текстовое поле они и в VCL и в MFC и даже в какой-нибудь библиотеке для какого-нибудь экзотичесого языка кнопка и текстовое поле. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||
|
|||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Шаблон по сути представляет возможность создавать объект/процедуру, которая маниплирует неким абстарактный объектом, но который должен реализовывать определенный строго заданный интерфес.
Если посмотреть на следующую картинку, ![]() то видно, что тот объект котрый реально подставяется может быть намного сложнее, но в действительности в шаблоне мы можем использовать только закрашенную область, иначе шаблон будет не совместим с другими классами. В терминах делфи различные объекты должны реализовать один общий интерфес, тогда объект, например контейнер, сможет получить доступ к его методам и тем самым вызывать одноименные методы у совершенно разных объектов. Т.о. для построения аналогичной схемы в делфи требуется явно описать общий интерфес, затем пронаследовать этот интерфес всеми объектами, которые нам необходимы в качестве элементов, того же контейнера, реализовть этот интерфес - создать все описанные в интерфесе методы. После этого класс контейнер использует уже не указатель на объект, а указатели на интерфес, который является аналогом псевдоним типа в С++. Интерфес же в С++ является неявным, что усложняет разработку, ведь для правильной работы, объекты - элементы обязаны реализовать определенный интерфейс, иначе контейнер не сможет использовать все нужные методы и операторы (просто не пройдет этап компиляции). Так вот в делфи RTTI позволяет реализовать передачу класса в виде переменной. Теперь если в конструкторе контейнера передать класс элементов (реализующих интерфес), то при помощи этой переменной легко создаются любое количество объектов-элементов, а доступ к ним происходит по средством итерфеса. Нужный функционал реализован, причем подчеркиваю интерфес задан явно и самоописан, тогда как в С++ это прийдется указывать в документации. В этом виде я ставлю знак равенства между псевдонимом типа и интерфесом. Так что подобный механизм (логика псевдонима класса) реализован в делфи, пусть иначе, но и логика программирования в делфи несколько иная. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 10 Всего: 50 |
Мда...
Шаблонов я не знаю, но так как в Дельфи нету их -- сие есть зло великое однако... Не используешь IDE гуёвый -- зваться недостоин программистом... -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 8 Всего: 207 |
[censored 2] ... я же пример привел, можно сделать рекурсивный compile_time_if, который будет всевозможные инварианты проверять: наличие методов, псевдонимов типов и т. д в случае, если какой-то инвариант не выполняется, можно, например, прервать компиляцию
Добавлено @ 13:12 Ты вообще знаешь, что такое компиляция? И как ты будешь генерировать функцию из ее шаблона перед компиляцией? например
т. е ты должен определить, что T - int, для этого тебе требуется анализ исходного кода, а это уже компиляция Что делает препроцессор. Он просматривает исходный код, тупо находя все определенные #define-ом макроконстанты и заменяя их на их значения в исходном коде. Т. е ему не нужна не структура программы, не типы и т. д -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Да я не сомневаюсь, что компилятор выругается на не соответствие типов. Слава богу не глупый, но определять нужные метода и операторы по ошибкам компилятора не лучшая идея, хотя в данном случае вопрос не принципиальный. MAKCim, если не сложно, опиши подробней, свой код, а то я Добавлено @ 14:04 template<bool Expression> struct invariant; - как я понял описывается шаблон стркутуры под названием invariant, но описание самой структуры я не вижу (ее поля и т.д.), что за слово Expression также не понятно. вот это похоже на создание нового шаблона на основе шаблона структуры invariant template<> struct invariant<true> {}; но почему-то вместо типа подставляется значение. Смысл пустого шаблона не ясен. Описание шаблона на основе заранее определенного типа тоже. Причем тут отсутствует даже идентфикатор нового шаблона -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| MAKCim |
|
||||||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 8 Всего: 207 |
Добавлено @ 14:18 Это не описание, а объявление, т. е описание может быть дальше по тексту или его может вообще не быть Expression - любая compile-time константа т. е если у нас например есть шаблон
то
a будет равно 0, b - 1, причем эти 0 и 1 - константы (явно видны в коде на ассемблере)
Добавлено @ 14:21
Это называется специализацией шаблона Грубо говоря, если тип соответствует типу в какой-то специализации шаблона, то для инстанцирования будет выбрана специализация, а не primary шаблон Смысл пустого шаблона - ничего не делать, если Expression == true -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||||||
|
|||||||||||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
MAKCim, и ты хочешь сказать что это все просто для понимания?
объясни плз, раньше я такого не видал просто -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
Совсем не обязательно неявный интерфейс усложняет разработку. Наоборот, он может упростить ее, поскольку не надо тратить время на выделение и объявление общего интерфейса. Кроме того, шаблоны позволяют работать с объектами, которые не имеют общего интерфейса, а лишь некоторое его подмножество. Например, если параметром шаблона явяется встроенный тип (скажем int), то мы не может вызывать методы у такой переменной. Но это не мешает в шаблонном классе написать метод, который вызывает некоторый метод у объекта с типом-параметром шаблона. То есть для некоторых параметров шаблонов доступна только часть функциональности, причем это проверятся на этапе компиляции. В то же время, можно использовать и обычные интерфейсы, как в Делфи. Таким образом, шаблоны не отменяют использование интерфесов, а лишь дополняют их. Попутно возникает вопрос к Beltar'у: вот ты говоришь, что вместо шаблонов можно использовать средства IDE, а как ты себе представляешь реализацию всего этого? |
|||
|
||||
![]()
|
| Правила ведения Религиозных войн | |
|
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Религиозные войны | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |