可以将lambda定义为数据成员吗?
例如,是否可以使用lambda来重写下面的代码示例,而不是使用函数对象?
我想知道的原因是因为以下的lambda函数可以作为参数传递:
我已经想到了,如果一个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 {
using Bar = decltype(say_hello);
Bar bar;
Foo() : bar(say_hello) {}
};
std::function
模板正是为这种情况引入的类型擦除器。 - Alexandre C.