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

    +1

    1. 1
    https://en.cppreference.com/w/cpp/language/lambda

    > Explanation
    > > <tparams>
    > Like in a template declaration, the template parameter list may be followed by an optional requires-clause, which specifies the constraints on the template arguments.
    > optional requires-clause
    небязательные обязательные пункты.

    Переводил почти час.

    Запостил: OlegUP, 02 Апреля 2019

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

    • На "PHP"?
      Ответить
    • ты понимаешь что такое "requires-clause"?
      это ключевое слово "requires"
      https://en.cppreference.com/w/cpp/keyword/requires

      optional -- значит оно не обязательное

      что не так?
      Ответить
      • Составь вместе.
        Ответить
      • Длинное , как мой хуй — предлинное тире ставится, ежели натиснуть ALT, затем набрати на клавиатури (не сотовой, на компьютерной!): 0151. Попробуй сам - и восхвали бога.
        Ответить
      • Есть два гендера варианта группировки:
        • optional (requires-clause)
        • (optional requires)-clause

        Который из них правильный?
        Ответить
        • да первый, в данном случае, просто с переводом requires-clause возникли сложности.
          Ответить
    • > [ captures ] <tparams>(optional)(c++20) ( params ) specifiers exception attr -> ret requires(optional)(c++20) { body }
      О! Теперь в объявлении лямбды есть все виды скобок:
      auto glambda = []<class T>(T a, auto&& b) { return a < b; };
      Ответить
      • typedef int o;
        auto oo = []<o>(){};


        Компилируется.
        Ответить
        • И даже так можно:
          auto oo = <::><o>()<%%>;


          Ещё можно так, но потребуется ключик -trigraphs:
          auto oo = ??(??)<o>()??<??>;
          Ответить
          • Блядь, это уже какой-то «Perl». Только если в «Перле» программа из сотни спецсимволов может делать кучу полезной работы (в частности, выполнить команду «rf» на корневом каталоге с флагами «-r» и «-f»), то в крестах программа из сотни спецсимволов не делает нихуя.
            Ответить
            • --вашу программу можно написать в три строчки
              --да, но это во-первых не расширяемо, а во-вторых не безопастно. Вот тебе шаблон на 800 строк который компилируется всего две минуты и делает совершенно безопасный и расширяемый код
              Ответить
            • Как красиво в диграфах:
              <:=:> –— захват всего контекста по значению.
              <:&:> –— захват всего контекста по ссылке.
              Ответить
    • почему такая жопа не работает. std::function<void(auto...)>

      ???
      Ответить
    • а как вам такой говнокод

      any outer = 12;
      std::function<any(const std::initializer_list<any> &)> main1 = [&] (const std::initializer_list<any> &params) ->any {
      auto iter = params.begin();
      auto end = params.end();
      any p0 = end != iter ? *iter++ : any();
      any p1 = end != iter ? *iter++ : any();

      std::cout << outer << std::endl;
      return p0 + p1;
      };

      o1["method2"] = main1;
      any r3 = o1["method2"](any("p1"), any("p2"));
      Ответить
      • А не использовать ли нам bbcode?
        Ответить
        • any outer = 12;
              std::function<any(const std::initializer_list<any> &)> main1 = [&] (const std::initializer_list<any> &params) ->any {
                  auto iter = params.begin();
                  auto end = params.end();
                  any p0 = end != iter ? *iter++ : any();
                  any p1 = end != iter ? *iter++ : any();
          
                  std::cout << outer << std::endl;
                  return p0 + p1;
              };
          
              o1["method2"] = main1;
              any r3 = o1["method2"](any("p1"), any("p2"));


          так лучше?
          Ответить
          • > так лучше?

            Читать лучше. Подход -- все равно жиденький. Вот когда operator . (...) дадут перегружать, тогда и поговорим
            Ответить

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