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

    +17

    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
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    #include <boost/spirit/include/phoenix_fusion.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
    
    #include <iostream>
    
    
    #define GEN_MACRO_0(X, Y)                             \
        ((X, Y)) GEN_MACRO_1
    #define GEN_MACRO_1(X, Y)                             \
        ((X, Y)) GEN_MACRO_0
    #define GEN_MACRO_0_END
    #define GEN_MACRO_1_END
    
    #define SHOW(name,val)                               \
            std::cout << name << " : " << val ;
    
    #define SHOW_TUPLE(r,_,tupple)                       \
           SHOW( "1st",BOOST_PP_TUPLE_ELEM(2,0,tupple))  \
           SHOW("\t2nd",BOOST_PP_TUPLE_ELEM(2,1,tupple)) \
           std::cout << std::endl;
    #define OUTPUT (ADD_PAREN_1 INPUT,_END) 
    
    
    #define SHOW_NODES(seq)                              \
            BOOST_PP_SEQ_FOR_EACH(SHOW_TUPLE,_,          \
                     BOOST_PP_CAT(GEN_MACRO_0 seq,_END) )
    
    int main() {
        SHOW_NODES(
            ("cock","unskill")
            ("rock","hard")
            ("price","over 100500")
            )
    }

    Годнокодец из boost::fusion.
    http://coliru.stacked-crooked.com/a/c516a67930a9c1a8

    Запостил: crastinus, 29 Декабря 2013

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

    • Дальше не читал:
      <boost/spirit
      <boost/fusion

      Сразу плюсанул. Особенно второе.
      Ответить
      • Главное ни тот, ни другой не используется. В каком-то из них подключен препроцессор.
        Ответить
        • а откуда тогда берется

          BOOST_PP_SEQ_FOR_EACH
          BOOST_PP_TUPLE_ELEM
          BOOST_PP_CAT

          неужто прям в язык вшито?
          Ответить
          • > неужто прям в язык вшито?
            Да каленым железом не изгонишь. Зашито у некоторых даже в головах.
            Ответить
            • "у всех нас есть что то лишнее в голове - у кого то это предубеждения, у кого то - карандаш"
              Ответить
            • >Зашито у некоторых даже в головах
              - Продемонстрируйте ваши способности работы с кортежами
              - Ну, примерно так:
              BOOST_PP_TUPLE_ELEM(2,0,(1,2))
              Ответить
          • Из буст препроцессора. Который и надо заинклудить вместо этих двух файлов.

            Ваш кэп.
            Ответить
          • BOOST_PP это макросы препроцессора.
            boost/fusion - эмуляция функциональщины
            boost/spirit - DSL генератор парсеров
            Ответить
            • Предлагаю еще феникса зацепить, чтобы компиляция не была слишком быстрой.
              Ответить
              • Чтобы успеть чай допить?
                Ответить
                • Чтобы на мечах подраться, проносясь мима друг друга на стульях
                  Ответить
                • Ну вот у меня парсер простейших предикатов на фениксе+спирите (сравнения, переменные, логические операции) компилился, емнип, минуты 2-3 на 2.6ГГц проце ;)
                  Ответить
                  • Может ты не умеешь его готовить?
                    Ответить
                    • Х.з. если честно. Заспиртованную грамматику я когда-то тут уже выкладывал. Можешь найти ее в моей кабинке.
                      Ответить
                      • Основная причина в том, что может ты хедер с грамматикой в кучу cpp подключил? Старайся подключать в один или подключай только в pch
                        Ответить
                        • Грамматика заныкана в цппшку ;) Я ж хоть и идиот, но не настолько, чтобы феникса половине проекта напоказ выставлять. Именно эта одна цппшка и компилилась столько ;)
                          Ответить
                          • Ну ок, перекомпилировать её каждый раз то зачем? В предкомпил её, когда не меняется.
                            Ответить
                            • Она юзала некоторые базовые хидеры, и пересобиралась, когда я их менял ;) Хотя когда они менялись, пересобирался почти весь проект.

                              P.S. Ну она не так и часто пересобиралась. Но когда пересобиралась - очень бесило.
                              Ответить
                              • А разбить зависимости. Те базовые хидеры что меняются поделить на те, что влияют на спирт и те что не влияют.
                                Ответить
                                • Да так то можно было бы. Но это же как лечить понос затыканием жопы ;) Симптомы вроде прошли, а проблема то осталась...

                                  P.S. Я этот проект забросил по причинам независящим от буста ;(
                                  Ответить
                                  • Поносом ты называешь спирт? Ну не знаю. Я уже спирт то брать теперь бы тоже не стал, но и если на его код не смотреть, то и поносом его язык назвать не поворачивается.
                                    Ответить
                                    • Не сам спирт, а скорость его компиляции. Сам спирт, внезапно, мне понравился. Я довольно быстро в него въехал, да и грамматика читабельная вышла.
                                      Ответить
                  • Можешь сравнить с Spirit X3? Хотя хз что там с фениксом.
                    Ответить
                    • Это вроде и был X3. Или нет... В общем пусть знатоки по хидерам узнают:
                      #include <boost/spirit/include/qi.hpp>
                      #include <boost/spirit/include/phoenix_core.hpp>
                      #include <boost/spirit/include/phoenix_operator.hpp>
                      #include <boost/spirit/include/phoenix_bind.hpp>
                      Ответить
                      • Старый boost::spirit. В экспериментальном и хидеры и файлы имеют в названии x3.
                        Ответить
                • и ГК почитать
                  Ответить
            • > boost/fusion - эмуляция функциональщины
              Ты с фениксом его попутал бро.
              Ответить
    • вывод "c++ -E" в студию!
      Ответить
      • Разве не очевидно:
        std::cout << "1st" << " : " << "cock"; std::cout << "2nd" << " : " << "unskill"; std::endl;
        ...
        Ответить
        • по моему прошлому опыту работы с бустом, я не уверен что там все будет настолько прямолинейным.
          Ответить
          • А вы не проходили по ссылке?
            Но если вас интересует вывод с ключом -E, то там как я описал в комментарии выше.
            Ответить
            • (нашел. надо было только "| tail -n 100" добавить, а то веб почебень помирала на количестве вывода.)

              хм. и на самом деле.
              Ответить
    • > cock

      Судя по соседнему слову unskill, автор имел в виду вовсе не член.
      Ответить
      • Царь же
        Ответить
      • Мало кто переводит это слово в его исходном смысле ;)
        Ответить
        • Тогда уж rooster.
          Ответить
          • Питушки распитушились,
            Но подраться не решились -
            Если сильно питушиться
            Можно пёрышек лишиться.
            Ответить
            • Ууу У!

              Петушки вы петушки
              С гребешком головушка!
              Скоро ждет вас, ребятушки
              До супца обновушка!
              Ответить
        • Гуглопереводчик выдал следующее

          петух
          кран
          хуй
          курок
          пенис
          самец
          елдак
          хер
          флюгер
          петушиный крик

          И самое интересное - никакого члена
          Ответить
      • Там столько интересного, а вы на такие слова обращаете. Ричард (он же дик) тоже можно поизвращать. К примеру, если сказать Член Львиное Сердце, то мало кто это поймет.
        Ответить
    • Когда я обернулся - он, уже голый, возбужденный кинулся на меня. Он навалился на меня и так крепко сжал, что я смог лишь сдавленно крякнуть. Я даже на секунду усомнился в его добрых намерениях.
      Ответить

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