Здравствуйте, B0FEE664, Вы писали:
BFE>>>5) Лямбда.
R>>Даже не знаю, уместно ли вспоминать о лябмдах в данном контесте. Все-таки, лябмда — это элемент парадигмы, позволяющей оперирровать функциями как данными. Но никак не средство оформления. И по отношению к лямбдам возникают почти все те же вопросы, что и по отношению к функциям: какая область видимости, какое связывание, член или не член...
BFE>Все приведённые примеры темы имеют вызов из одного метода. В этом случае функцию можно оформить прямо внутри метода в виде лямбды (не захватывая никаких переменных): никаких проблем с видимостью, связыванием и членством.
Это всего лишь примеры, подразумевается многократное использование внутри cpp файла, и лямбда тут може быть только если функция маленькая и сама лямбда маленькая.
Здравствуйте, Igore, Вы писали:
I>Это всего лишь примеры, подразумевается многократное использование внутри cpp файла, и лямбда тут може быть только если функция маленькая и сама лямбда маленькая.
Вчера перед сном листал стандарт, увидел пример:
auto vglambda = [](auto printer)
{
return [=](auto&& ... ts)
{
printer(std::forward<decltype(ts)>(ts)...); // OK: ts is a function parameter packreturn [=]()
{
printer(ts ...);
};
};
};
auto p = vglambda( [](auto v1, auto v2, auto v3) { std::cout << v1 << v2 << v3; } );
auto q = p(1, ’a’, 3.14); // OK: outputs 1a3.14
q(); // OK: outputs 1a3.14
Смотря на такое мне совсем не кажется, что лямбда должна быть маленькой.
BFE>Вчера перед сном листал стандарт, увидел пример: BFE>Смотря на такое мне совсем не кажется, что лямбда должна быть маленькой.
Стандарт описывает требования к языку и поведеннию программ, но никак не к стилю кодирования. Делать выводы о хорошем стиле использования лямбд по этим примерам, это примерно то же самое, что пытаться понять, как правильно пользоваться оператором goto, по примерам из стандарта.
Здравствуйте, rg45, Вы писали:
R>Стандарт описывает требования к языку и поведеннию программ, но никак не к стилю кодирования. Делать выводы о хорошем стиле использования лямбд по этим примерам, это примерно то же самое, что пытаться понять, как правильно пользоваться оператором goto, по примерам из стандарта.
Кстати, про goto. Лямбду можно использовать для замены goto.
Что же касается стиля и использование не по назначению — посмотрите на SFINAE.
Здравствуйте, B0FEE664, Вы писали:
BFE>Что же касается стиля и использование не по назначению — посмотрите на SFINAE.
SFINAE, как и лямбды, тоже можно использовать по-разному. Одно дело, когда SFINAE используется там, где достаточно простой специализации/перегрузки, и совсем другое, когда альтернативу трудно подобрать без значительных переделок и редизайна.
Кстати, лямбды нельзя использовать в списках инициализации, а частенько бывает нужно вызвать "внутреннюю" функцию. Так что они не годятся как универсальный подход. Получается надежней [inline] static функций ничего нет .