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) {}
};
lambda 只是创建一个函数对象,因此,是的,您可以使用 lambda 初始化函数成员。这是一个例子:
#include <functional>
#include <cmath>
struct Example {
Example() {
lambda = [](double x) { return int(std::round(x)); };
};
std::function<int(double)> lambda;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)