Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 340 341 [342] 343 344 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5116
,
|
|
|
|
Это работает только в динамике и это важно, потому что не позволяет конструировать нужные типы. А с объектами работать плюсы умеют не хуже. Цитата т.е. невозможно узнать, является ли класс инстансом шаблона или нет? Чего? |
|
Сообщ.
#5117
,
|
|
|
|
как? и главное, что это дает, ведь класс может не полностью реализовать шаблон? можно ли узнать, какие методы он реализует, а какие -- нет? |
|
Сообщ.
#5118
,
|
|
|
|
Цитата korvin @ как? Всё той же специализацией ![]() ![]() template<class T> class A {}; template<class T> class B {}; template<class T> class B<A<T> > {}; //специализация для какого-то типа A<T> Или опять таки флаг ![]() ![]() template<class T> class A {}; template<class T> struct IsA { static const bool value = false; }; template<class T> struct B<A<T> > { static const bool value = true; }; Цитата korvin @ и главное, что это дает, ведь класс может не полностью реализовать шаблон? Нет, шаблон он реализует полностью. Просто шаблон может быть разным в зависимости от ![]() Цитата korvin @ можно ли узнать, какие методы он реализует, а какие -- нет? Что вы хотите узнать? Получить список всех методов некоего типа? |
|
Сообщ.
#5119
,
|
|
|
|
Цитата D_KEY @ Это работает только в динамике. тебе еще раз намекнуть про тайпклассы в хаскелле? |
|
Сообщ.
#5120
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ Это работает только в динамике. тебе еще раз намекнуть про тайпклассы в хаскелле? А причем тут они и вообще Haskell? Поясни мысль. И мы тут сравнивали шаблоны с дженириками. |
|
Сообщ.
#5121
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата korvin @ как? Всё той же специализацией ![]() ![]() template<class T> class A {}; template<class T> class B {}; template<class T> class B<A<T> > {}; //специализация для какого-то типа A<T> но B<A<T>> не может полагаться на A<T>, ведь этот A<T> может реализовывать не все методы из A<*>. как быть? писать специализации B<*> для всех возможных комбинаций методов A<*> ? Добавлено Цитата MyNameIsIgor @ Нет, шаблон он реализует полностью. Просто шаблон может быть разным в зависимости от ![]() какое-то странное у вас понятие полноты, а "шаблон может быть разным в зависимости от" это вообще трындец, извините |
|
Сообщ.
#5122
,
|
|
|
|
Цитата korvin @ но B<A<T>> не может полагаться на A<T> В каком смысле "полагаться"? Цитата korvin @ ведь этот A<T> может реализовывать не все методы из A<*> Вы не понимаете Не существует никакого A<*> и списка его методов Существует конкретный тип A<T> и список его методов.Цитата korvin @ как быть? писать специализации B<*> для всех возможных комбинаций методов A<*> ? Самое страшное, что нас ждёт - это ошибка компиляции. Но, таки да, это одна из причин, по которым все так ждали концептов. |
|
Сообщ.
#5123
,
|
|
|
|
Цитата D_KEY @ А причем тут они и вообще Haskell? Поясни мысль. И мы тут сравнивали шаблоны с дженириками. при том, что ты утверждаешь, мол, то что я говорю может работать только в динамике, но тайпклассы хаскелля -- это в общем-то те же дженерики, только работающие в статике |
|
Сообщ.
#5124
,
|
|
|
|
Цитата korvin @ какое-то странное у вас понятие полноты Это вы не совсем понимаете шаблоны Не от глупости, естественно, просто не хотите.Цитата korvin @ а "шаблон может быть разным в зависимости от" это вообще трындец, извините Почему же? Рассматривайте специализацию шаблонов как перегрузку функций. Перегрузка ведь не трындец? |
|
Сообщ.
#5125
,
|
|
|
|
Цитата korvin @ тайпклассы хаскелля -- это в общем-то те же дженерики, только работающие в статике Я видимо не до конца понимаю тайпклассы. Ничего общего не вижу. |
|
Сообщ.
#5126
,
|
|
|
|
Цитата MyNameIsIgor @ В каком смысле "полагаться"? ну... в прямом. но суть я уж понял, так что можно не продолжать. |
|
Сообщ.
#5127
,
|
|
|
|
Цитата korvin @ но суть я уж понял, так что можно не продолжать. Не похоже |
|
Сообщ.
#5128
,
|
|
|
|
Цитата MyNameIsIgor @ Перегрузка ведь не трындец? ![]() почему же? трындец =)) Добавлено Цитата D_KEY @ Я видимо не до конца понимаю тайпклассы. Ничего общего не вижу.погоди, минут через пять покажу пример |
|
Сообщ.
#5129
,
|
|
|
|
Цитата korvin @ ну... в прямом. но суть я уж понял, так что можно не продолжать. Вы, похоже, выделяете какой-то "главный шаблон с именем A". А такого не существует. Все специализации в общем-то равноправны. Добавлено Цитата korvin @ почему же? трындец =)) Оригинально... |
|
Сообщ.
#5130
,
|
|
|
|
Цитата MyNameIsIgor @ Оригинально... А чего ты хотел? Перегрузка функций теоретически действительно скорее трындец, чем что-то хорошее, хотя бы потому, что вводит два "объекта" с одинаковыми именами но разными типами, а это вообще-то противоречит остальной части системы типов большинства языков. Но в С++ функции не являются объектами Поэтому перегрузка не создает никаких проблем.А как только мы делаем функции объектами(через указатель на функцию или через объекты-функторы), то перегрузка уходит Ну и кроме того перегрузка очень удобная штука |