auto объявлена? Синтетический пример:
const auto test = []() {
test();
}
Можно, надо только capture сделать
Аа, он рекурсию что ли хочет Ну почему нельзя? Можно передать эту лямбду как параметр например
для этого придётся городить доп. конструкции
#include <iostream> int main() { const auto printer = [](auto... args) { const auto printElem = [](auto elem) { std::cout << elem << ", "; }; (printElem(args), ...); std::cout << '\n'; }; printer(1, 2, 3, "hello", 10.5f); } разве это не вызов лямбды из лямбды? (пример из блога Б.Филиппека)
ну, я пользуюсь таким трюком. пишем хелпер один раз: template <class F> struct y_combinator { F f; template <class... Args> decltype(auto) operator()(Args&&... args) { return f(std::ref(*this), std::forward<Args>(args)...); } template <class... Args> decltype(auto) operator()(Args&&... args) const { return f(std::ref(*this), std::forward<Args>(args)...); } }; template <class F> y_combinator(F) -> y_combinator<F>; и юзаем: auto fib = y_combinator{ [](auto self, int arg) { if (arg <= 1) return 1; return self(arg - 1) + self(arg - 2) } };
вызывать лямбду из лямбды можно. захватить лямбду в саму же себя нельзя
Обсуждают сегодня