1. C++ / Говнокод #15758

    +9

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    template<...many params...>
    class Foo
    {
      template <typename T>
      class __Bar 
      {
        T t;
      public :
        __Bar(T t) : t(t) {}  
      };
    
    public :
      template <typename T>
      __Bar<T> Bar(T t)
      {
        return __Bar<T>(t); // просто __Bar(t) нельзя, вывод не сработает
      }
    
      template <typename T>
      void Buzz (T t)
      {
      }
    };
    
    ...
    Foo f;
    f.Buzz(Bar(5));

    А как вы выкручиваетесь из неумения определять тип результата по типу параметров конструктора?

    Запостил: TarasB, 15 Апреля 2014

    Комментарии (87) RSS

    • SEO-пост
      Ответить
    • > f.Buzz(Bar(5));
      Кто такой Bar()? Имеется в виду f.Bar()?
      Ответить
    • > определять тип результата по типу параметров конструктора
      Поясни вот этот момент, пожалуйста. У конструктора же нет и не может быть типа результата ;) Поэтому при создании объекта и надо указывать тип явно и полностью...
      Ответить
      • Тоже нихера в этой фразе не понял.
        Ответить
        • Ну как я понял - он хочет чтобы тип создаваемого объекта выводился в зависимости от типов аргументов, которые передают конструктору. Т.е. если на этом примере - конструктору передали int, значит T = int и запиливается экземпляр__Bar<int>.
          // псевдокод
          Bar i(5); // это Bar<int>
          Bar s("dasd"); // а это Bar<const char *>
          Ответить
        • Он хочет Diamonds из жабы
          auto ints = std::pair<>(3, 5);
          Ответить
          • > Diamonds из жабы
            Почитал, пофапал. Но они же наоборот работают? Выводят тип для правой стороны присвания по типу, который требутся в левой?
            Map<String, List<String>> m = new HashMap<>();
            Ответить
            • Ан нет, по аргументам тоже умеет.
              Ответить
              • Это в 8-ой вроде автовывод лучше сделали.

                >> Diamonds из жабы
                >Почитал, пофапал.
                Дык в фабричных методах и раньше тип выводился c левой стороны вообще безо всяких <>.
                А вот когда объект порождается в аргументе метода, то так ни 6 ни 7 не умеет.
                Ответить
                • Дык в фабричных методах он и в крестах выводится.
                  Ответить
                  • То есть даже в С+11 в методе автовывод есть, а в конструкторе - херъ?
                    Я думал кресты по ненужным фичам всегда далеко впереди жабы.
                    Ответить
                    • Ну в крестах типы выводятся только справа налево.
                      Ответить
                • public static <T> void test(T t) {
                      // ...
                  }
                  
                  public static void main(String[] args) {
                      Map<String, List<String>> m1 = null;
                      test(new HashMap<>(m1));
                  }
                  Вывело тип на 7й. По аргументам (как и хочет Тарас) и 7я умела.
                  Ответить
                  • public static <T> void test(T t) {
                        // ...
                    }
                    
                    public static void main(String[] args) {
                        test(new HashMap<>());
                    }
                    Эээ, компилится. Это будет HashMap<Object, Object>?
                    Ответить
                    • или в тернарниках плохой вывод
                      static List<String> list(List<String> l){
                          return null!=l ? l: Collections.emptyList();//не компилицо
                          return null!=l ? l: Collections.<String>emptyList();//надо так
                      
                          //или так
                          if (null!=l) return l;
                          return Collections.emptyList();
                      
                      }
                      Ответить
                  • Не. Я немного не об том, чтоб выводило по ожидаемым аргументам. Типа:
                    static void do(Map<String,String> m) {
                    <....>
                    }
                    
                    do(Collections.emptyMap()) //не
                    do(Collections.<String,String>emptyMap()) //надо писать так

                    Ответить
                    • Забавно, что Map<String, String> m = Collections.emptyMap() работает. Какой-то кривоватый вывод типов, до хаскелевского не дотягивает.
                      Ответить
                      • А разве в Хаскеле вывод типов не через всю программу модуля может протащиться? Ну например какое-то условие к типу добавилось в конце программы и объявление экземпляра типа в начале программы его сменило при мономорфизме.
                        Ответить
                        • Да запросто и через всю может ;) Только рано или поздно надоедает читать сообщения об ambigious type, или портянки, в которых компилятор рассказывает о своих размышлениях... и начинаешь приписывать ко всем функциям сигнатурки с типами :)
                          Ответить
                          • > и начинаешь приписывать ко всем функциям сигнатурки с типами :)
                            И код внезапно становится пухлее, но понятнее.
                            Ответить
                          • > и начинаешь приписывать ко всем функциям сигнатурки с типами
                            А потом когда понимаешь, что твои эстетические чувства задеты - снова удаляешь. На самом деле достаточно иногда к одной функции приписать.
                            Ответить
                          • Любители китайских порномультиков, я путаю ваши аватары. Анимешники долбанутые.
                            Ответить
                            • > я путаю ваши аватары
                              Отличай по цвету глаз и волос ;)

                              > Анимешники долбанутые.
                              Ты так говоришь, как-будто это что-то плохое ^_^
                              Ответить
                            • Кстати, почему особые ценители японского творчества бугуртят, когда их мультики и комиксы называют мультиками и комиксами, приговаривая, что это же совсем другое, что мы не понимаем сути™, что надо говорить "аниме" и "манга", хотя отличаются они только заниженной частотой кадров и случайным направлением реплик, то есть ничем, что могло бы их вывести из класса мультиков и комиксов?
                              Ответить
                              • >>http://www.youtube.com/watch?v=Q2R_qqbKcVg
                                Приготовьте пиццу, товарищи.
                                Ответить
                              • Потому что это не мультики и не комиксы.
                                Ответить
                              • Почему особые ценители литературы бугуртят, когда сравнивают детективы американской и английской школы, хотя отличаются они только героями, то есть ничем, что могло бы их вывести из жанра детектива?
                                Ответить
                              • > случайным направлением реплик
                                Емнип это зависит от рукожопости локализаторов - забывают отразить странички.
                                Ответить
                                • Читаю мангу справа налево, как и должно быть. Кто разворачивает тот пидор.
                                  Ответить
                                  • > Читаю мангу справа налево, как и должно быть.
                                    Не, ну я еще понимаю читать оригинал на мунспике... это имеет смысл.

                                    Но зачем насиловать моск чтением блоков русского текста справа-налево - я в упор не могу понять.

                                    Ну разве чтобы потом всем рассказывать "я читаю нефлипнутую мангу, я ниибаца отаку!".
                                    Ответить
                                    • Это ж ведь не Ъ, смотреть на творение мангаки зеркально.
                                      Ответить
                                      • > смотреть на творение мангаки зеркально
                                        Мангака предъяву бросака?
                                        Ответить
                                        • По данным на 2006 год, в Японии работает около 3000 профессиональных мангак
                                          Ответить
                                          • > около 3000 профессиональных мангак
                                            И овер 100500 мангак-дилетантов?
                                            Ответить
                                    • > Но зачем насиловать моск чтением блоков русского текста справа-налево - я в упор не могу понять.
                                      Дело привычки.
                                      Больше проблем вызывает то, что японцы пишут текст в манге обычно сверху вниз-справа налево, и "облако" текста получается вытянутым по вертикале. Русский (или английский) текст туда впихнуть проблематично.
                                      Ответить
                                • А что за прикол с репликами? Или это только в комиксах важно, а в мультиках это пофиг?
                                  Ответить
                                  • В мультиках реплики идут (я надеюсь) в порядке течения времени, потому пофиг.
                                    А вот в комиксах направление повествования лежит в двумерной плоскости, автор ничем не ограничен, особенно, если курил.
                                    Ответить
                                    • > В мультиках реплики идут (я надеюсь) в порядке течения времени

                                      В литературе, мультиках и фильмах повествование не всегда идет в порядке течения времени :) Всякие флешбеки, отступления, описание параллельных событий и т.п. никто не отменял...

                                      > автор ничем не ограничен, особенно, если курил
                                      Сверху-вниз справа-налево японцы рисуют. Ну не по спирали же, и не змейкой ;)
                                      Ответить
                                      • А Memento вообще задом наперед идет. Как Янус Полуэктович у Стругацких.
                                        Ответить
                                        • >А Memento
                                          Это я хотел написать!
                                          Ответить
                                        • А в арабских сказках бывает и стек: воспоминание внутри воспоминания, которое внутри воспоминания и т. д.

                                          У японцев бывает аналогичное?
                                          Ответить
                                          • >стек: воспоминание внутри воспоминания, которое внутри воспоминания
                                            Simpsons S17E13. Нолан отдыхает. Это как пьеса в средине пьесы в Гамлете - короче всё уже переизобретено десяток раз.
                                            Ответить
                                      • > В литературе, мультиках и фильмах повествование не всегда идет в порядке течения времени :)
                                        А, ещё и это время... Я-то говорил про время, которое фильм длится. И тут возможно всего два направления, из которых обычно одно разумное выбирают.

                                        > Ну не по спирали же, и не змейкой ;)
                                        Но ведь могут (в отличие от фильма)
                                        В настольных играх, например, реализовано, надо авторам комиксов взять на заметку.
                                        Ответить
                                      • >В литературе, мультиках и фильмах повествование не всегда идет в порядке течения времени :)
                                        Раз на то пошло, зацени ещё Higurashi no Naku Koro ni. Меня в своё время очень доставило. Хотя в ретроспективе затрудняюсь сказать, почему именно. Steins;Gate, в принципе, туда же.
                                        Из не-мультиков - внезапно, Bioshock Infinite (там повествование линейно с т.з. главного героя, нелинейность немного в другом).
                                        Ответить
                                        • > Bioshock Infinite
                                          Да я ее давно прошел, отличная гама и по геймплею и по сюжету ;)

                                          P.S. В какой еще гаме дадут полезную напарницу...
                                          Ответить
                                          • > по сюжету
                                            Objection!
                                            Сюжет там примитивный до очевидности. Сказочно наркоманский. Сеттинг вообще анрил. Концовка дрянь. Второй будет получше.
                                            Ответить
                              • > бугуртят
                                Потому что истинные ценители всегда бугуртят от непочтительного отношения к предмету их любви и обожания ;) Вспомни тех же пайтонистов.

                                Ну и вторая причина - у нас мультики считаются (а большинство и являются) детскими. У японцев же их смотрит и стар и млад, и большая часть рисуется совсем не детям. Отсюда и слова про "это же совсем другое".
                                Ответить
                                • Современные мультфильмы - говно.
                                  Ответить
                                • > Вспомни тех же пайтонистов.
                                  Вспомнил, пока писал комментарий, даже упомянуть хотел :)

                                  Эх, сколько важности в людях...
                                  Ответить
                                • >Вспомни тех же пайтонистов.
                                  Эти питонисты почему-то не могут обьяснить, почему рнр - говно, но на нем форумных движков как грязи, а вот на питоне один и то ббкод глючит.
                                  Ответить
                                  • > форумных движков
                                    Потому что форумные движки нецелесообразно писать на чем-то кроме пыхи из-за хостингов?
                                    Ответить
                                    • Ну а потом получается, что пифон такой охуенный, но софта на нем нету.
                                      Ответить
                                      • > пифон такой охуенный, но софта на нем нету

                                        первое, что приходит в голову
                                        GAE, Review Board, Rietveld, Calibre, Mercurial, Ubuntu, Django
                                        Ответить
                                        • > Ubuntu
                                          О_о. Вместе с ядром и всем софтом? :)
                                          Ответить
                                        • Нет, я не про фреймверки, а про готовые бесплатные веб движки.

                                          >но софта на нем нету
                                          >Ubuntu,
                                          Чо, целиком?
                                          Ответить
                                          • > Чо, целиком?
                                            Там тонны питоньего кода, и в инсталляторе и в куче предустановленных приложений.
                                            Ответить
                                            • Ну с таким же успехом и баш можно считать языком программирования.
                                              Ответить
                                              • Он таким и есть.
                                                Ответить
                                              • > баш можно считать языком программирования
                                                Баш - язык программирования. Просто хуёвый.
                                                Ответить
                                                • Я и имею в виду не полноту по Тьюрингу.
                                                  Ответить
                                        • > первое, что приходит в голову
                                          Yellow dog Updater, Modified весь написан на python.
                                          Ответить
                            • На ГК есть аватары?
                              Ответить
                              • На ГК есть комментарии?
                                Ответить
                                • Очевидных, невероятных вопросов & ответов тред.
                                  Кеп просто давится от зависти.
                                  Ответить
                      • >Какой-то кривоватый вывод типов, до хаскелевского не дотягивает.
                        тип_плюющийся_кофе.жпег
                        Нашёл с чем сравнить. Само собой.
                        И не только хацкелевского, в жабе наверное (был до 8?) наихудший среди конкурентов - C# (тут хз), Scala, Nemerle, OCaml.
                        Ответить
                        • В жаве вывод типов?
                          Ответить
                          • В жаве вывод типов.
                            Ответить
                            • Какой вывод?
                              Ответить
                              • типов
                                Ответить
                                • Какой вывод типов? Только не надо отвечать "в жаве".
                                  Ответить
                                  • в жаве
                                    Ответить
                                  • > Какой вывод типов?

                                    Херовый.
                                    Ответить
                                    • Блин, что вы имеете в виду?
                                      Ответить
                                      • > Блин, что вы имеете в виду?
                                        Вывод типов. В жабе. Херовый.
                                        Ответить
                                        • лол, питоньщики не в курсе про вывод типов

                                          действительно, зачем им
                                          Ответить
                                          • > питоньщики не в курсе про вывод типов
                                            Пришло время выводить типы.
                                            Типы сами не выведутся.
                                            Ответить
                                            • >Пришло время выводить типы.
                                              >Типы сами не выведутся.
                                              Ну вот они в питоне их и вывели. Начисто.
                                              Ответить
                                              • Всё - PyObject, даже небо, даже Аллах!
                                                Ответить
                                          • Нет, я в курсе. Вот в c# они есть. А в жаве он нинужен, нет?
                                            Ответить
                                            • Информативный пост.

                                              > Вот в c# они есть. А в жаве он нинужен, нет?
                                              Кому ты задаешь вопрос?

                                              > Вот в c# они есть
                                              Причем тут C#?
                                              Кто есть в C#?
                                              Кто не нужен в жаве?
                                              Ответить
                                              • > Кому ты задаешь вопрос?
                                                Ему.
                                                > Причем тут C#?
                                                При том.
                                                > Кто есть в C#?
                                                Они.
                                                > Кто не нужен в жаве?
                                                Он.
                                                Ответить
    • В чём соль? Тебя смущает необходимость функций вроде std::make_pair? Зачем тогда столько странного кода?
      Ответить
    • > А как вы выкручиваетесь из неумения определять тип результата по типу параметров конструктора?
      Ну во первых тут что-то явно слишком наворочено с шаблонами. Такая универсальность обычно не нужна.
      Во вторых есть паттерн функция-генератор. Обычно свободная по заветам STL и начинается с перфикса make_, например make_vector и тд.
      В четвертых можно взять F# или Java новенькую. По моему даже Scala. Там такой проблемы нет. Не помню, но в Haskell вроде тоже проблем с этим не было.
      Ответить
      • Функция-генератор, фи.
        Паттерн - это когда затыкают дыры в языке.
        Ответить
    • Мы называем его – краник.
      А как называют его в вашей семье?
      Ответить

    Добавить комментарий