可以将 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) {}
};
最佳答案
lambda 只是创建一个函数对象,所以,是的,您可以使用 lambda 初始化一个函数成员。这是一个例子:
#include <functional>
#include <cmath>
struct Example {
Example() {
lambda = [](double x) { return int(std::round(x)); };
};
std::function<int(double)> lambda;
};
关于C++ 11 lambda作为成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601930/