Re: Awaiting Review
От: rg45 СССР  
Дата: 12.02.19 13:24
Оценка: 3 (1) +1
Здравствуйте, malegkin, Вы писали:

M>
M>template <typename F>
M>void repeat(unsigned n, F f) {
M>    while (n--) f();
M>}
M>


В качестве наиболее универсального способа передачи функтора в функцию имеет смысл использовать форвардную ссылку:

template <typename F>
void repeat (usnsigned n, F&& f) {
    while (n--) f();
}


Это не обычная rvalue ссылка, как может показаться на первый взгляд, а так называемая forwarding reference. Она может превратиться как в rvalue ссылку, так и в lvalue — константную, или неконстантную. Тем самым обеспечит автовыведение наиболее подходящего типа ссылки, подобранного в соответствии с типом фактического параметра, и убережет от нежелательного копирования/перемещения, что может быть актуально для "тяжелых" функциональных объектов и лямбд.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 12.02.2019 13:32 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.