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

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    SFINAE — это просто
    
    template<typename T> struct has_foo{
    private:  // Спрячем от пользователя детали реализации.
        static int detect(...);  // Статическую функцию и вызывать проще.
        template<typename U> static decltype(std::declval<U>().foo(42)) detect(const U&);
    public:
        static constexpr bool value = std::is_same<void, decltype(detect(std::declval<T>()))>::value;  // Вот видите, готово.
    };

    Программирование на "Modern C++" всё больше и больше становится похожим на отчаянную попытку выебать козла плазменным телевизором.
    via h/205772

    Запостил: gost, 30 Сентября 2017

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

    • АААА МОИ ГЛАЗА!!!!!!!1!11
      Ёбаная крестушня
      Ответить
    • Просто это анскилябра кривая писала. Вот как надо:

      template<class T, class = void>
      struct has_foo : std::false_type {};
       
      template<class T>
      struct has_foo<T, decltype(std::declval<T>().foo(1488))> : std::true_type {};

      https://ideone.com/nggFFg
      Ответить
      • Nyet. https://ideone.com/VUwcpH
        Ответить
        • https://youtu.be/9r3u12H0y44?t=38
          Ответить
        • Надо было назвать zloi_foo, чтобы как в кино.
          Ответить
        • В этом оно не отличается от оп-поста, и обычно это желаемое поведение.
          Но у меня вот даже захачить получилось https://ideone.com/UH8XjX - правда это уже говно какое-то.
          Ответить
          • Охуеть, месье определённо знает толк в метушне!

            PS,
            s|// Вот видите, готово\.|// Вот видите, говно\.|
            Ответить
          • обычно надо проверить есть ли вообще foo принимающий аргументы ...Args. Тип возвращаемого значения интересует куда реже.
            Ответить
            • Нормальным программистам в нормальных программах "обычно" не нужно ни то, ни другое. А метапитуха тип возвращаемого значения должен интересовать, если он это значение собирается использовать (не в случае с void выше, конечно). Хотя тогда лучше возвращаемый тип проверять через is_convertible.
              Ответить
              • > Нормальным программистам в нормальных программах "обычно" не нужно ни то, ни другое

                по-твоему "нормальные программисты" просто пишут бойлерплейт или тьму макросов?

                > Хотя тогда лучше возвращаемый тип проверять через is_convertible

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

                    И вот им нужна проверка на наличие метода
                    Ответить
                    • Лол. Только в твоем метушином манямирке.
                      Что-то я сомневаюсь, что в спаннере или фотошопе есть хоть одна проверка на наличие метода на этапе конпеляции хоть в одной из зависимостей. Как же бедняши написали sqlite на своей сишке, если в ней нельзя метод на этапе конпеляции проверить и вообще методов нет? Как же реализовать интрузивный список или дерево без проверок методов на этапе конпеляции? Как же мы жили, пока деклтайп не завезли, страшно подумать.
                      Ответить
                      • я с тобой на 90% согласен. но - обощая - в крестах же ничего другого кроме как "на этапе кунпиляции" и нету. а народ хочет какую-нибудь динамику. вот и извращаются. вот поэтому буст из в года в год толще и толще становится. хоть какая-то динамика - даже если только на стади компиляции.
                        Ответить
                        • Я не слепо хейчу метушню, как могло показаться (только лолки все возводят в абсолют). Мне просто не нравится, когда метухи пишут оверинженерный нечитаемый понос там, где можно сделать просто. Ещё мне не нравится самомнение, отрастающее у метухов из-за того что они вызубрили свои метакостыли.
                          Что касается проверки метода на этапе конпеляции, то это почти наверняка в любой ситуации неуместное говно - я бы очень не хотел, чтобы мой метод просто молча не вызывался из-за опечатки в названии или сигнатуре.
                          Если еще не очевидно, я пишу с субару и фраушвайнхунд.
                          Ответить
                          • > Мне просто не нравится [...] оверинженерный нечитаемый понос там [...]

                            1) метушня это просто текущая мода.

                            2) это старая(*) неизлечимая болезнь, от которой разработка никогда никуда не денется.
                            (*) вспомни когда было сказано "premature optimization is root of all evil".

                            с другой стороны, оверинженеринг с опытом проходит. запомни: программа есть отражение того что происходит в голове разраба. (плюс вершн контрол: "и как происходит".) оверинженеринг это просто отражение недопонимания выполняемой задачи. (с другой стороны, иногда нихера не известно в начале проекта, и приходится оверинженерить что бы на дедлайне не парится.)
                            Ответить
                      • > Как же бедняши написали sqlite на своей сишке, если в ней нельзя метод на этапе конпеляции проверить и вообще методов нет?

                        писали больше кода. Я ж не говорю, что нельзя.

                        > Как же реализовать интрузивный список или дерево без проверок методов на этапе конпеляции?

                        в stl контейнерах есть проверки на is_noexcept_movable - проверки на наличие метода, по факту.

                        > Как же мы жили, пока деклтайп не завезли, страшно подумать.

                        в си же зачем-то завезли typeof. Видимо, без него сложно было
                        Ответить
                        • > в си же зачем-то завезли typeof. Видимо, без него сложно было

                          Это не в Си завезли, а сделали нестандартное расширение, которое поддерживает GCC, Clang и ICC под линупсами (емнип, ICC в линупсах мимикрирует под GCC, а в виндовсах под MSVC)
                          И применяется сия хуита в основном во всяких говномакросах, типа
                          #define max(a,b) \
                            ({ typeof (a) _a = (a); \
                                typeof (b) _b = (b); \
                              _a > _b ? _a : _b; })

                          Кстати обратите внимание, в этом говномакросе используется аж целых два нестандартных расширения:
                          https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
                          https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
                          Ответить
                          • > Statement-Exprs.html
                            Да это же замыкания!
                            Ответить
      • > foo(1488)
        \0
        Ответить
    • в с++20 завезут концепты, и всякая подобная херня будет записываться в пару строк:
      https://wandbox.org/permlink/xN8VPaYXXhsf2emD
      Ответить
      • Интересно, какую еще ебанутую хуйню для плюсов придумают например в c++30 или c++50... Надеюсь что это дерьмо сдохнет раньше, чем наступит такой год
        Ответить
        • какую еще "ебанутую хуйню" придумаешь ты чтобы хейтить с++?
          Ответить
          • Имхо, самая важная "ебанутая хуйня" - с++30 невозможно будет изучить полностью.
            Ответить
            • А текущие стандарты ещё возможно?
              Ответить
            • Как C++ выучить, пацаны?
              Ответить
            • любой набор символов будет являться валидным кодом на С++30
              Ответить
              • Но всегда будет при этом UB.
                Ответить
                • Но в гцц будет специальное расширение, которое такой UB-код будет просто скармливать шестому перлу.
                  Ответить
                  • А msvc будет всегда выдавать захардкоженный экзешник, который через телеметрию пытается угадать, что хотел пользователь от данной программы.
                    Ответить
              • А он будет работать так же, как если его интерпретировать как код на J?
                Ответить
            • Скоро все опять вернутся к C++98 всем желаю дожить до 2098
              Ответить
            • Заканчивался 2025-й год. СТРАУСТРУП брёл по засыпанному неубранным снегом тротуару на интервью, неохотно отвечая на приветствия своих бывших коллег, стоявших в очереди к доширакомату и проклинавших десятиуровневую идентификацию. «Главное, чтобы они не догадались, куда я направляюсь», – размышлял наш герой, небезосновательно опасаясь конкуренции. Год для программистов выдался совсем печальным – искусственный интеллект окончательно заменил собой целую профессию, теперь заказчику было достаточно сказать: «ещё один Фейсбук», и нужный код моментально находился на облачном складе, далее менялись цвета и перетасовывались кнопки (дабы избежать обвинений в плагиате), и новый продукт поступал в продажу. Новые версии изготавливались по подобному же сценарию. Заправляли всем этим делом вовсе не программисты, а представители шоу-бизнеса, поднаторевшие на подобных перелицовках начиная ещё с 90-х годов. Разработчики 1С считали себя в безопасности, однако в предыдущем году Россия и Зимбабве последними в мире присоединились к унифицированной системе глобальной бухгалтерии. В военной сфере требовалась лишь поддержка ПО, и там прозябали 80-тилетние старцы с воспалёнными глазами.
              Ответить
              • ...
                Зато потребление достигло невиданных высот, держать в доме телевизор старше одного месяца считалось неприличным, новые модели активно привозились, а старые сдавались в утиль. Искусственный интеллект так и не осилил транспортных средств – то самолёт вмажется в небоскрёб, то автобус въедет в остановку, так что многие программисты переквалифицировались в шофёров. Именно в этой сфере деятельности и подвизался СТРАУСТРУП в последние несколько лет.

                Бизнес-центр ничем не отличался от своих собратьев: после стандартных антитеррористических процедур, включавших себя рентген, флюорографию, томографию, спектрографию и прочие «графии», так знакомые любому жителю этой поры, СТРАУСТРУП с трудом отбился от вагиноскопии и попал в комнату №101, ибо рисунок его радужной оболочки по ошибке совпал с данными одного известного биткойнодилера. К счастью, у СТРАУСТРУПА был с собой пистолет, голографическое фото на котором послужило надёжным удостоверением личности в просвещённый электронный век.
                Ответить
                • В скромном офисе СТРАУСТРУПА сразу же отвели в комнату для собеседований на должность шофёра. Огромный экран симулятора занимал всю стену, и на нём проигрывался ролик с рассказом о компании. Интервьюер вошёл неожиданно и сразу же приступил к делу.

                  – Итак, нам требуется драйвер. Нужно развозить новые модели бытовой техники и забирать старую. Владеете ли вы автоматической гирей? – так на модном полуанглийском именовалась коробка передач.
                  – Есть небольшой опыт, – отвечал СТРАУСТРУП. – Я всю жизнь имел дело с ручной, так что проблем не будет.
                  – Сомневаюсь. Я пробовал стик после автомата, и у меня... В самом деле, без высокоуровневых фреймворков сейчас никуда, с ними быстрее и удобнее Ладно, вот вам тестовое задание: развернуть строку… ой, я сам из бывших… нужно подъехать к дому и развернуть автомобиль так, чтобы он был припаркован задом наперёд.
                  – А зачем это?
                  – Проверить ваши навыки вождения. Сначала расскажите, какой подход примените.
                  – Ну, объеду квартал…
                  – Зачем это, достаточно же просто развернуться.
                  – Видите ли, я в последние годы был связан с высоконагруженностью – водил грузовик с прицепом…
                  – Считайте, что ширина дороги достаточная. Считайте, что у вас легковой автомобиль. Кстати, вы водили их последние версии?
                  – Нет, но…
                  – Сомневаюсь, что вы справитесь с замыканиями.
                  – Какими ещё замыканиями?
                  – Гудки режут слух, так что в современных моделях звуковой сигнал мычит. Так как же вы развернётесь?
                  – Ну, я подъеду, включу Reverse…
                  – Библиотечные функции использовать нельзя!
                  – А как же многопоточность? Водители из других полос вряд ли будут рады простаивать, пока я описываю большой круг.
                  – Это не главное. Нам важно, чтобы быстро. К сожалению, мы не можем вам предложить работу. Наши специалисты разворачиваются за пару секунд.
                  – Да не может быть!
                  – Смотрите, – и экзаменатор подошёл к симулятору. Разгон, удар по тормозам, управляемый занос, машина встаёт в обратном направлении…
                  Ответить
                  • На улице СТРАУСТРУП увидел большую пробку: грузовик с брендом компании, где только что был получен отказ, никак не мог развернуться. Осатаневшие водители гудели, мычали и просто матерились. Незадачливый шофёр высунулся из окна и крикнул СТРАУСТРУПУ:

                    – Братишка, я тебе покушать принёс! Посмотри, чтобы я задом ни в кого не въехал.

                    После серии тырканий туда-сюда, грузовику удалось-таки припарковаться. СТРАУСТРУП не удержался и задал вопрос водителю по поводу разворота путём управляемого заноса.

                    – Ты что, только что от нашего клоуна? – сообразил шофёр. – Это он так нашу кадровичку до метро подвозит, ей-то ничего не будет, она всё равно деревянная, а у меня в кузове 20 шестиметровых рулонов сданных телевизоров – побьются.

                    – Так ведь их же всё равно в утиль.

                    – Дурак что ли?

                    – А куда, в Африку?

                    – Ты ведь работу ищешь? Так? Ну пойдём, попробую поговорить, может, тебя возьмут…

                    Склад оказался огромным ангаром, забитым под завязку бытовой техникой.

                    – Вот смотри, – объяснял СТРАУСТРУПУ уже знакомый нам шофёр. – Клиенты один чёрт не помнят, что было год назад. Поэтому мы свозим их барахло сюда, выдерживаем 12 месяцев, потом приделываем шильдик новой модели и в путь!

                    – То есть как это?

                    – Ты что, еду сам не покупаешь? Когда у твоих любимых сосисок истекает срок годности, специальная тётка клеит свежую этикетку. Так и у нас… Постой здесь, я перетру с мастером…

                    СТРАУСТРУП был счастлив – его взяли на работу! Мастер тоже был из… бывших, долго гонял по способам сортировки просроченной продукции, предложил разработать алгоритм обхода склада, спрашивал, почему у них не стек, а очередь. В конце беседы похлопал по плечу:

                    – В нашем деле прежде всего нужно знать, чем равенство объектов отличается от equals. Клиенты в этом ни бум-бум, а мы этим пользуемся. Выходи после Нового года, будешь менять указатели, тьфу ты, шильдики. Хочешь смузи? Не боИсь, не просроченное… Десятилетней выдержки!..

                    Так счастливо закончилась эта удивительная история трудоустройства программиста.
                    Ответить
                    • Свежачок? Неужели оригинальный контент?
                      Ответить
          • Мне-то как раз ничего придумывать не надо - причин хейтить плюсы и так достаточно. Да и хуйню, которую добавляют в плюсы(и из-за этой хуйни эти говноплюсы хейтят), добавляют не хейтеры, а всякие там говностандартизаторы.
            Ответить
            • # не хейтеры, а всякие там говностандартизаторы

              А вдруг говностандартизаторы тоже хейтеры?
              Ответить
              • Хейтер Вася много лет учился, вёл исследования, писал статьи, монографии и книги, в конце концов став многомудрым экспертом по "C++". Даже Александреску заявил, что «Вася немного разбирается в шаблонах» и посвятил его в Стандартизаторы. После чего хейтер-стандартизатор добавил в плюсы хуйню и стал хейтить их ещё больше!
                Ответить
        • В C++50 введут expression deduction:
          auto f = [](auto args...) -> auto { auto; };
          f(...);  // Вычислить нужный результат

          После чего наступит коммунизм всеобщее благоденствие, и крестопрогеры смогут смотреть на других прогеров как на говно, потому что больше крестокода писать им будет не нужно.

          P. S. Правда, к тому времени все программы на всех других языках давно будут писаться нейросетями и искуственными интеллектами, и программисты будут нинужны. Но это уже совсем другая история...
          Ответить
    • Минутка интересных фактов:
      Метушня — с украинского «суета, суетня; хлопоты, хлопотня; суматоха, сумятица; сутолока».
      Спонсор этой минутки интересных фактов — проект Wiktionary: https://ru.wiktionary.org/wiki/метушня.
      Ответить
      • Хватит уже метушиться, метушки
        Ответить
        • Метушки разметушились,
          Но подраться не решились.
          Если сильно метушиться,
          Можно метушни лишиться.
          Если метушни лишиться,
          Нечем будет метушиться.
          Ответить
          • ... если сильно метушиться,
            UB может приключиться ...
            Ответить
            • ...
              Если UB вдруг приключится,
              Нечем будет метушиться.
              Ответить
      • >Метушня
        неактуальная_шутка_про_breaking_bad.тхт
        Ответить

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