Lambda 可以定义为类成员吗?
例如,是否有可能使用 lambda 代替函数对象重写下面的代码示例?
struct Foo {
std::function<void()> bar;
};
我之所以怀疑,是因为下面的 lambda 可以作为参数传递:
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; });
}
我认为,如果 lambda 可以作为函数参数传递,那么它们也可以作为成员变量存储。
修修补补之后,我发现这个方法很有效(但是有点毫无意义) :
auto say_hello = [](){ std::cout << "Hello"; };
struct Foo {
typedef decltype(say_hello) Bar;
Bar bar;
Foo() : bar(say_hello) {}
};