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

    +1

    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
    namespace detail
    {
    template <typename Function, typename Tuple, std::size_t... i>
    void applyForEach(Function&& f, Tuple&& t, std::index_sequence<i...>)
    {
      (static_cast<void>(std::invoke(f, std::integral_constant<std::size_t, i>{}, std::get<i>(t))), ...);
    }
    } // namespace detail
    
    template <typename Function, typename Tuple>
    void applyForEach(Tuple&& tuple, Function&& function)
    {
      using Indexes = std::make_index_sequence<std::tuple_size_v<Tuple>>;
      detail::applyForEach(std::forward<Function>(function), std::forward<Tuple>(tuple), Indexes{});
    }

    Строка 6. Мы тут сделали синтаксис для fold expression, только вам его не дадим: у вас документов нет.

    Clang: https://wandbox.org/permlink/lNOFu1sOV9bA2LJF
    GCC: https://wandbox.org/permlink/yqeiYHTgZOz9NkkJ

    Запостил: Elvenfighter, 07 Августа 2019

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

    • Смысле что написать бы надо было как-то так:
      std::invoke(f, std::integral_constant<std::size_t, i>, std::get<i>(t));...

      Ну или так:
      std::invoke(f, std::integral_constant<std::size_t, i>, std::get<i>(t))...;
      Ответить
    • Переведи на "PHP".
      Ответить
      • Как?
        Ответить
        • Не ебу, сделай мне красиво так, чтоб я понял. Я не обязан знать языки для калькуляторов.
          Ответить
        • Не знаю крестов, но попробую:
          <?php
          
          namespace detail;
          
          function applyForEach($f, $t, $sequence)
          {
            foreach($sequence as $i) {
              call_user_func_array($f, array($i, $t[$i]));
            }
          }
          
          
          function applyForEach2($tuple, $_function)
          {
            $Indexes = range(0, count($tuple) - 1);
            \detail\applyForEach($_function, $tuple, $Indexes);
          }
          
          /* test */
          
          applyForEach2(array(1, 1, 2, 3, 5, 8, 13, 21), function($x, $y) {echo $x . ' => ' . $y . PHP_EOL;});


          http://ideone.com/GQLIfb
          Ответить
    • показать все, что скрытоvanished
      Ответить

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