Информация об изменениях

Сообщение Re[7]: Трюки с fold expression от 11.06.2020 5:38

Изменено 11.06.2020 5:43 rg45

Re[7]: Трюки с fold expression
Здравствуйте, _NN_, Вы писали:

_NN>>>
_NN>>>template <typename Pred, typename F, typename... Ts>
_NN>>>void call_if_not_predicate_v(Pred pred, F f, Ts... ts)
_NN>>>{
_NN>>>    for (auto v : {ts...})
_NN>>>    {
_NN>>>        if (pred(v))
_NN>>>            break;
        
_NN>>>        f(v);
_NN>>>    }
_NN>>>}
_NN>>>



_NN>Проверенно на практике, компилятор гораздо охотнее оптимизирует линейный код из fold expression чем рекурсию.


Да кто же с этим спорит. Вопрос же в том, как выглядел код ДО этого. И вот оказывается, что тот код, который мы как бы улучшаем, полностью надуман.

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


Да как же ты передашь разные типы, если внутри функции все эти объекты все равно складываются в один initializer_list? У тебя это просто не скомпилируется.

_NN>Мы заменили рекурсивный код времён C++14 на fold expression и получили более быстрый код, а так же немаловажно, более быструю компиляцию.


Ну вот замена шаблонной рекурсии фолд экспрешенами — это хороший пример, тут я ничего против не имею. А вот замена циклов фолд экспрешенами притянута за уши.
Re[7]: Трюки с fold expression
Здравствуйте, _NN_, Вы писали:

_NN>>>
_NN>>>template <typename Pred, typename F, typename... Ts>
_NN>>>void call_if_not_predicate_v(Pred pred, F f, Ts... ts)
_NN>>>{
_NN>>>    for (auto v : {ts...})
_NN>>>    {
_NN>>>        if (pred(v))
_NN>>>            break;
        
_NN>>>        f(v);
_NN>>>    }
_NN>>>}
_NN>>>



_NN>Проверенно на практике, компилятор гораздо охотнее оптимизирует линейный код из fold expression чем рекурсию.


Да кто же с этим спорит. Вопрос же в том, как выглядел код ДО этого. И вот оказывается, что тот код, который мы как бы улучшаем, полностью надуман.

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


Да как же ты передашь разные типы, если внутри функции все эти объекты все равно складываются в один initializer_list? У тебя это просто не скомпилируется.

_NN>Мы заменили рекурсивный код времён C++14 на fold expression и получили более быстрый код, а так же немаловажно, более быструю компиляцию.


Ну вот замена шаблонной рекурсии фолд экспрешенами — это хороший пример, тут я ничего против не имею. А вот замена циклов фолд экспрешенами притянута за уши.

P.S. Я против fold expressions ничего не имею, если что