Можно ли определить лямбда-члены как члены класса?
Например, можно ли переписать приведенный ниже пример кода, используя лямбду вместо функционального объекта?
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) {}
};