Сообщение Re: Awaiting Review от 12.02.2019 13:24
Изменено 12.02.2019 13:32 rg45
Re: Awaiting Review
Здравствуйте, malegkin, Вы писали:
M>
В качестве наиболее универсального способа передачи функтора в функцию имеет смысл использовать форвардную ссылку:
Это не обычная rvalue ссылка, как может показаться на первый взгляд, а так называемая forwarding reference. Она может превратиться как в rvalue ссылку, так и в lvalue, константную, или неконстантную. Тем самым обеспечит автовыведение наиболее подходящего типа ссылки, подобранного в соответствии с типом фактического параметра, и убережет от нежелательного копирования/перемещения, что может быть актуально для "тяжелых" функциональных объектов и лямбд.
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, константную, или неконстантную. Тем самым обеспечит автовыведение наиболее подходящего типа ссылки, подобранного в соответствии с типом фактического параметра, и убережет от нежелательного копирования/перемещения, что может быть актуально для "тяжелых" функциональных объектов и лямбд.
Re: Awaiting Review
Здравствуйте, malegkin, Вы писали:
M>
В качестве наиболее универсального способа передачи функтора в функцию имеет смысл использовать форвардную ссылку:
Это не обычная rvalue ссылка, как может показаться на первый взгляд, а так называемая forwarding reference. Она может превратиться как в rvalue ссылку, так и в lvalue — константную, или неконстантную. Тем самым обеспечит автовыведение наиболее подходящего типа ссылки, подобранного в соответствии с типом фактического параметра, и убережет от нежелательного копирования/перемещения, что может быть актуально для "тяжелых" функциональных объектов и лямбд.
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 — константную, или неконстантную. Тем самым обеспечит автовыведение наиболее подходящего типа ссылки, подобранного в соответствии с типом фактического параметра, и убережет от нежелательного копирования/перемещения, что может быть актуально для "тяжелых" функциональных объектов и лямбд.