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

Сообщение Re: Трюки с fold expression от 09.06.2020 13:02

Изменено 09.06.2020 13:09 rg45

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

_NN>Полезный набор

_NN>https://foonathan.net/2020/05/fold-tricks/

_NN>Например

_NN>
_NN>for (auto elem : ts)
_NN>{
_NN>    if (pred(elem))
_NN>        return elem;
_NN>}
_NN>


_NN>==>


_NN>
_NN>std::common_type_t<decltype(ts)...> result;
_NN>bool found = ((pred(ts) ? (result = ts, true) : false) || ...);
_NN>// expands to: (pred(ts[0]) ? (result = ts[0], true) : false)
_NN>//          || (pred(ts[1]) ? (result = ts[1], true) : false)
_NN>//          || ...
_NN>


Пардон, но это же жульничество. Если ts — это variadic pack, то не скомпилируется первый вариант, а если нет, то второй. Ну либо я недопонял глубины иносказательности.

P.S. А все остальное, что есть по ссылке — какая-то банальщина.
Re: Трюки с fold expression
Здравствуйте, _NN_, Вы писали:

_NN>Полезный набор

_NN>https://foonathan.net/2020/05/fold-tricks/

_NN>Например

_NN>
_NN>for (auto elem : ts)
_NN>{
_NN>    if (pred(elem))
_NN>        return elem;
_NN>}
_NN>


_NN>==>


_NN>
_NN>std::common_type_t<decltype(ts)...> result;
_NN>bool found = ((pred(ts) ? (result = ts, true) : false) || ...);
_NN>// expands to: (pred(ts[0]) ? (result = ts[0], true) : false)
_NN>//          || (pred(ts[1]) ? (result = ts[1], true) : false)
_NN>//          || ...
_NN>


Пардон, но это же жульничество. Если ts — это variadic pack, то не скомпилируется первый вариант, а если нет, то второй. Эти варианты НЕ взаимозаменяемы. Ну либо я недопонял глубины иносказательности.

P.S. А все остальное, что есть по ссылке — какая-то банальщина.