Чем lambda лучше функтора?
От: Максим Рогожин Россия  
Дата: 06.05.18 06:56
Оценка:
Привет!

lambda лучше функтора тем, что мы можем определить ее прямо в том месте где она нужна? А еще какие-то преимущества есть у lambda по сравнению с функторами?
Re: Чем lambda лучше функтора?
От: Alexander G Украина  
Дата: 06.05.18 07:07
Оценка: 2 (1) +4
Здравствуйте, Максим Рогожин, Вы писали:

МР>lambda лучше функтора тем, что мы можем определить ее прямо в том месте где она нужна? А еще какие-то преимущества есть у lambda по сравнению с функторами?


Labmda не лучше функтора, labmda и есть функтор.

Если речь о сравнении самописного класса с operator() и лябмды, то, скорее, более компактная запись, и без рутинных действий по захвату контекста вручную.
Класс то тоже можно объявить локальный, прямо в функции, но это сложннее воспринимается.
Впрочем, большая и сложная лямбда тоже сложно воспринимается, поэтому нетривиальный функтор лучше вынести из места вызова в отдельный класс или функцию.
Русский военный корабль идёт ко дну!
Re: Чем lambda лучше функтора?
От: Evgeny.Panasyuk Россия  
Дата: 06.05.18 07:33
Оценка: 2 (1) +1
Здравствуйте, Максим Рогожин, Вы писали:

МР>lambda лучше функтора тем, что мы можем определить ее прямо в том месте где она нужна? А еще какие-то преимущества есть у lambda по сравнению с функторами?


Большим преимуществом является автоматический захват используемых переменных. Например используешь в теле лямбды N переменных из окружающего контекста — и все они без дополнительных движений автоматом захватываются.
В случае же отдельного класса тебе для захвата нужно написать Θ(N) дополнительного кода вручную (причём Θ(N) в нескольких местах — в определении самого класса, и в месте захвата). Плюс ещё нужно протащить захватываемые типы, или вывести — что означает создание ко всему прочему вспомогательной make_* (либо C++17).
Re[2]: Чем lambda лучше функтора?
От: andyp  
Дата: 06.05.18 08:54
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Labmda не лучше функтора, labmda и есть функтор.


Lambda и есть функтор, тип которого тебе пофиг. Lambda — абстракция типа функтора.
Re: Чем lambda лучше функтора?
От: Анатолий Широков СССР  
Дата: 06.05.18 09:11
Оценка: +1
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


МР>lambda лучше функтора тем, что мы можем определить ее прямо в том месте где она нужна? А еще какие-то преимущества есть у lambda по сравнению с функторами?


Главное преимущество лямбда выражений — это локализация места обработки информации без создания новых сущностей. А так, результат лямбда выражения — это и есть функциональный объект (функтор).
Отредактировано 06.05.2018 9:11 Анатолий Широков . Предыдущая версия .
Re: Чем lambda лучше функтора?
От: Constructor  
Дата: 06.05.18 18:27
Оценка: 1 (1)
Здравствуйте, Максим Рогожин, Вы писали:

МР>lambda лучше функтора тем, что мы можем определить ее прямо в том месте где она нужна? А еще какие-то преимущества есть у lambda по сравнению с функторами?


У обычной лямбды нет никаких формальных преимуществ по сравнению с локальным классом, имеющим operator(). Generic lambda является аналогом локального класса с шаблонным operator(), который по суровым законам C++ нельзя определить (не допускается использовать шаблоны в локальных классах).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.