【发布时间】:2011-09-29 22:10:51
【问题描述】:
可以将 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 函数一个)。
std::function模板正是作为这种情况下的类型橡皮擦引入的。 -
你试过了吗?你为什么要我们为你做这件事?如果它出错了,那么也来这里发布错误。
-
Lambdas 是函数对象!是的,您可以将
bar设为 lambda。 -
一些 lambdas 也可以成为函数指针。
-
@Dani:嗯,标准组自己完成了所有工作,制定了 FDIS(国际标准最终草案)in March。剩下的就是 ISO 的一个标志。