Size: a a a

2020 November 07

AF

Aidar Fattakhov in pro.cxx
Liber Azerate
По ссылке-то?
Условно кажется рекурсивная лямбда без захвата должна уметь кастануться в указатель на рекурсивную функцию
источник

LA

Liber Azerate in pro.cxx
Александр Караев
Почему непрактичная-то? Если мне нужна рекурсивная функция, то аналогично мне может быть нужна рекурсивная лямбда без каких-то доп. ограничений
Рекурсивная лямбда – довольно странная необходимость, но если уже что-то понадобилось, то вопрос за каким-то оверхедом вряд ли стоит
источник

АК

Александр Караев... in pro.cxx
Aidar Fattakhov
Непонятно как себя не по ссылке принять
Ты по ссылке не сможешь захватить, не положив её в std::function
источник

AF

Aidar Fattakhov in pro.cxx
Александр Караев
Ты по ссылке не сможешь захватить, не положив её в std::function
?
источник

AF

Aidar Fattakhov in pro.cxx
С какого стандарта такое?
источник

АК

Александр Караев... in pro.cxx
Aidar Fattakhov
С какого стандарта такое?
С любого. auto l = [&l]{}; не соберётся.
источник

AF

Aidar Fattakhov in pro.cxx
Александр Караев
С любого. auto l = [&l]{}; не соберётся.
Потоуммучто тут тип не выведен
источник

AF

Aidar Fattakhov in pro.cxx
Тоесть он рекурсивно зависим
источник

АК

Александр Караев... in pro.cxx
Liber Azerate
Рекурсивная лямбда – довольно странная необходимость, но если уже что-то понадобилось, то вопрос за каким-то оверхедом вряд ли стоит
Это не странная необходимость. Рекурсивный визитор для какой-нибудь древовидной структуры - навскидку
источник

АК

Александр Караев... in pro.cxx
Aidar Fattakhov
Потоуммучто тут тип не выведен
Так я о том же. Захват не поможет реализовать рекурсивную лямбду
источник

O

Ofee in pro.cxx
Aidar Fattakhov
Ещё один иф в стандарте?
Кажется, там либо ещё один иф, либо где-то совершенно неожиданно может сломаться совместимость, очень похоже, что большинство пунктов существуют только потому что "так исторически сложилось", ибо сейчас name lookup изнутри тела лямбды — не очень очевидная штука, на мой взгляд
источник

VS

Vlad Serebrennikov in pro.cxx
Ofee
Кажется, там либо ещё один иф, либо где-то совершенно неожиданно может сломаться совместимость, очень похоже, что большинство пунктов существуют только потому что "так исторически сложилось", ибо сейчас name lookup изнутри тела лямбды — не очень очевидная штука, на мой взгляд
то есть было бы очевиднее иметь доступ к внутренностям closure object?
источник

O

Ofee in pro.cxx
Александр Караев
Так я о том же. Захват не поможет реализовать рекурсивную лямбду
Нам ведь для рекурсивного вызова не нужно захватывать сам объект лямбды, мы уже в теле closure type, и для него же гарантируется стандартом наличие operator(). Достаточно позволить вызывать его изнутри, при этом не нужно будет ни захватывать, ни обращаться к объекту лямбды по имени из лямбда-выражения, поэтому проблемы нет. Цена — лишнее условие в стандарте и не самый красивый синтаксис

Собственно, в моём примере это получилось и у GCC, и у MSVC просто потому что они предоставляют operator() внутри лямбда-выражения
источник

АК

Александр Караев... in pro.cxx
Ofee
Нам ведь для рекурсивного вызова не нужно захватывать сам объект лямбды, мы уже в теле closure type, и для него же гарантируется стандартом наличие operator(). Достаточно позволить вызывать его изнутри, при этом не нужно будет ни захватывать, ни обращаться к объекту лямбды по имени из лямбда-выражения, поэтому проблемы нет. Цена — лишнее условие в стандарте и не самый красивый синтаксис

Собственно, в моём примере это получилось и у GCC, и у MSVC просто потому что они предоставляют operator() внутри лямбда-выражения
Мы обсуждали текущие возможности стандарта, где для вызова лямбды внутри самой себя надо иметь в том или ином виде this
источник

O

Ofee in pro.cxx
Vlad Serebrennikov
то есть было бы очевиднее иметь доступ к внутренностям closure object?
Думаю, что да, хотя я и прекрасно понимаю, что придётся разбираться с тем, чей this мы хотим видеть внутри выражения и тут без неочевидных решений тоже никак, кажется
источник

VS

Vlad Serebrennikov in pro.cxx
Ofee
Думаю, что да, хотя я и прекрасно понимаю, что придётся разбираться с тем, чей this мы хотим видеть внутри выражения и тут без неочевидных решений тоже никак, кажется
то, что имеется сейчас, точно проще объяснять
источник

AF

Aidar Fattakhov in pro.cxx
Ofee
Думаю, что да, хотя я и прекрасно понимаю, что придётся разбираться с тем, чей this мы хотим видеть внутри выражения и тут без неочевидных решений тоже никак, кажется
Да грубо говоря можно впилить штуку типа mutable специально для этого
источник

AF

Aidar Fattakhov in pro.cxx
[]()скишками{}
источник

AF

Aidar Fattakhov in pro.cxx
Но ключевые слова добавлять неоч
источник

AF

Aidar Fattakhov in pro.cxx
Aidar Fattakhov
[]()скишками{}
При желании любой другой this можно передать явно
источник