Можно ли определить лямбда как члены класса?
Например, можно ли переписать пример кода ниже, используя лямбда вместо объекта функции?
struct Foo {
std::function<void()> bar;
};
Я удивляюсь, потому что в качестве аргументов можно передать следующую лямбду:
template<typename Lambda>
void call_lambda(Lambda lambda) // what is the exact type here?
{
lambda();
}
int test_foo() {
call_lambda([]() { std::cout << "lambda calling" << std::endl; });
}
Я понял, что если лямбда может быть передана как аргумент функции, возможно, они также могут быть сохранены как переменная-член.
После большего мастерства я обнаружил, что это работает (но это вроде бессмысленно):
auto say_hello = [](){ std::cout << "Hello"; };
struct Foo {
typedef decltype(say_hello) Bar;
Bar bar;
Foo() : bar(say_hello) {}
};