На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 340 341 [342] 343 344 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата korvin @
    то что предлагаю я работает хоть в динамике хоть в статике, это не важно.

    Это работает только в динамике и это важно, потому что не позволяет конструировать нужные типы.
    А с объектами работать плюсы умеют не хуже.

    Цитата
    т.е. невозможно узнать, является ли класс инстансом шаблона или нет?

    Чего?
      Цитата MyNameIsIgor @
      В статике - возможно.

      как? и главное, что это дает, ведь класс может не полностью реализовать шаблон? можно ли узнать, какие методы он реализует, а какие -- нет?
        Цитата korvin @
        как?

        Всё той же специализацией
        ExpandedWrap disabled
          template<class T>
          class A {};
           
          template<class T>
          class B {};
           
          template<class T>
          class B<A<T> > {}; //специализация для какого-то типа A<T>

        Или опять таки флаг
        ExpandedWrap disabled
          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 @
        можно ли узнать, какие методы он реализует, а какие -- нет?

        Что вы хотите узнать? Получить список всех методов некоего типа?
          Цитата D_KEY @
          Это работает только в динамике.

          тебе еще раз намекнуть про тайпклассы в хаскелле?
            Цитата korvin @
            Цитата D_KEY @
            Это работает только в динамике.

            тебе еще раз намекнуть про тайпклассы в хаскелле?

            А причем тут они и вообще Haskell? Поясни мысль.
            И мы тут сравнивали шаблоны с дженириками.
              Цитата MyNameIsIgor @
              Цитата korvin @
              как?

              Всё той же специализацией
              ExpandedWrap disabled
                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 @
              Нет, шаблон он реализует полностью. Просто шаблон может быть разным в зависимости от :)

              какое-то странное у вас понятие полноты, а "шаблон может быть разным в зависимости от" это вообще трындец, извините
                Цитата korvin @
                но B<A<T>> не может полагаться на A<T>

                В каком смысле "полагаться"?
                Цитата korvin @
                ведь этот A<T> может реализовывать не все методы из A<*>

                Вы не понимаете :) Не существует никакого A<*> и списка его методов :) Существует конкретный тип A<T> и список его методов.
                Цитата korvin @
                как быть? писать специализации B<*> для всех возможных комбинаций методов A<*> ?

                Самое страшное, что нас ждёт - это ошибка компиляции. Но, таки да, это одна из причин, по которым все так ждали концептов.
                  Цитата D_KEY @
                  А причем тут они и вообще Haskell? Поясни мысль.
                  И мы тут сравнивали шаблоны с дженириками.

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

                    Это вы не совсем понимаете шаблоны :) Не от глупости, естественно, просто не хотите.
                    Цитата korvin @
                    а "шаблон может быть разным в зависимости от" это вообще трындец, извините

                    Почему же? :) Рассматривайте специализацию шаблонов как перегрузку функций. Перегрузка ведь не трындец? :)
                      Цитата korvin @
                      тайпклассы хаскелля -- это в общем-то те же дженерики, только работающие в статике

                      :blink: Я видимо не до конца понимаю тайпклассы. Ничего общего не вижу.
                        Цитата MyNameIsIgor @
                        В каком смысле "полагаться"?

                        ну... в прямом. но суть я уж понял, так что можно не продолжать.
                          Цитата korvin @
                          но суть я уж понял, так что можно не продолжать.

                          Не похоже :)
                            Цитата MyNameIsIgor @
                            Перегрузка ведь не трындец? :)

                            почему же? трындец =))

                            Добавлено
                            Цитата D_KEY @
                            :blink: Я видимо не до конца понимаю тайпклассы. Ничего общего не вижу.

                            погоди, минут через пять покажу пример
                              Цитата korvin @
                              ну... в прямом. но суть я уж понял, так что можно не продолжать.

                              Вы, похоже, выделяете какой-то "главный шаблон с именем A". А такого не существует. Все специализации в общем-то равноправны.

                              Добавлено
                              Цитата korvin @
                              почему же? трындец =))

                              Оригинально...
                                Цитата MyNameIsIgor @
                                Оригинально...

                                А чего ты хотел? Перегрузка функций теоретически действительно скорее трындец, чем что-то хорошее, хотя бы потому, что вводит два "объекта" с одинаковыми именами но разными типами, а это вообще-то противоречит остальной части системы типов большинства языков.
                                Но в С++ функции не являются объектами :) Поэтому перегрузка не создает никаких проблем.
                                А как только мы делаем функции объектами(через указатель на функцию или через объекты-функторы), то перегрузка уходит ;)
                                Ну и кроме того перегрузка очень удобная штука :)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 340 341 [342] 343 344 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.4701 ]   [ 14 queries used ]   [ Generated: 31.07.26, 10:29 GMT ]