Re[9]: Внутренние функции класса
От: SaZ  
Дата: 21.01.19 17:22
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>Так ровно того же эффекта можно добиться при помощи обычныой функции


Ну так да, просто функция будет засорять пространство имён. А лямбды можно использовать как вложенные функции (которых нет в плюсах).
Re[4]: Внутренние функции класса
От: Igore Россия  
Дата: 22.01.19 08:19
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>>>5) Лямбда.


R>>Даже не знаю, уместно ли вспоминать о лябмдах в данном контесте. Все-таки, лябмда — это элемент парадигмы, позволяющей оперирровать функциями как данными. Но никак не средство оформления. И по отношению к лямбдам возникают почти все те же вопросы, что и по отношению к функциям: какая область видимости, какое связывание, член или не член...


BFE>Все приведённые примеры темы имеют вызов из одного метода. В этом случае функцию можно оформить прямо внутри метода в виде лямбды (не захватывая никаких переменных): никаких проблем с видимостью, связыванием и членством.


Это всего лишь примеры, подразумевается многократное использование внутри cpp файла, и лямбда тут може быть только если функция маленькая и сама лямбда маленькая.
Re[5]: Внутренние функции класса
От: B0FEE664  
Дата: 22.01.19 09:21
Оценка:
Здравствуйте, Igore, Вы писали:

I>Это всего лишь примеры, подразумевается многократное использование внутри cpp файла, и лямбда тут може быть только если функция маленькая и сама лямбда маленькая.


Вчера перед сном листал стандарт, увидел пример:
auto vglambda = [](auto printer)
{
  return [=](auto&& ... ts)
         {
           printer(std::forward<decltype(ts)>(ts)...); // OK: ts is a function parameter pack
           return [=]()
                  {
                    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


Смотря на такое мне совсем не кажется, что лямбда должна быть маленькой.
И каждый день — без права на ошибку...
Re[6]: Внутренние функции класса
От: rg45 СССР  
Дата: 22.01.19 09:37
Оценка:
Здравствуйте, B0FEE664, Вы писали:


BFE>Вчера перед сном листал стандарт, увидел пример:

BFE>Смотря на такое мне совсем не кажется, что лямбда должна быть маленькой.

Стандарт описывает требования к языку и поведеннию программ, но никак не к стилю кодирования. Делать выводы о хорошем стиле использования лямбд по этим примерам, это примерно то же самое, что пытаться понять, как правильно пользоваться оператором goto, по примерам из стандарта.
--
Re[7]: Внутренние функции класса
От: B0FEE664  
Дата: 22.01.19 10:10
Оценка:
Здравствуйте, rg45, Вы писали:

R>Стандарт описывает требования к языку и поведеннию программ, но никак не к стилю кодирования. Делать выводы о хорошем стиле использования лямбд по этим примерам, это примерно то же самое, что пытаться понять, как правильно пользоваться оператором goto, по примерам из стандарта.


Кстати, про goto. Лямбду можно использовать для замены goto.

Что же касается стиля и использование не по назначению — посмотрите на SFINAE.
И каждый день — без права на ошибку...
Re[8]: Внутренние функции класса
От: rg45 СССР  
Дата: 22.01.19 10:20
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Что же касается стиля и использование не по назначению — посмотрите на SFINAE.


SFINAE, как и лямбды, тоже можно использовать по-разному. Одно дело, когда SFINAE используется там, где достаточно простой специализации/перегрузки, и совсем другое, когда альтернативу трудно подобрать без значительных переделок и редизайна.
--
Отредактировано 22.01.2019 10:21 rg45 . Предыдущая версия .
Re[2]: Внутренние функции класса
От: Videoman Россия https://hts.tv/
Дата: 25.01.19 14:59
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>5) Лямбда.


Кстати, лямбды нельзя использовать в списках инициализации, а частенько бывает нужно вызвать "внутреннюю" функцию. Так что они не годятся как универсальный подход. Получается надежней [inline] static функций ничего нет .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.