在 C++ 的本地范围内使用 lambda
Using lambdas in local scope in c++
像这样在本地范围内声明 lambda 是否可以:
// reference to method is just a call back function.
void(*referenceToSomeMethod)();
// store call back function
void foo(void(*pointerToMethod)())
{
referenceToSomeMethod = pointerToMethod; // save reference to method
}
int main()
{
referenceToSomeMethod = nullptr;
if (1 == 1)
{
// use of lambda on local scope
foo([]() {
printf("Executing callback function\n");
});
} // leaving scope lambda may not longer be valid?
// simulate some work
Sleep(10000);
if (referenceToSomeMethod != nullptr)
referenceToSomeMethod(); // execute lambda
}
在现实生活中,我会等到事件发生时才触发回调方法。我可以 运行 回调指针指向不再存在的函数的风险吗?
我知道这适用于 c# 和其他具有垃圾收集器的语言。但这适用于 C++ 吗?
带有空括号的 Lambda 等同于函数指针,并且将以相同的方式按值进行复制。回答是。
像这样在本地范围内声明 lambda 是否可以:
// reference to method is just a call back function.
void(*referenceToSomeMethod)();
// store call back function
void foo(void(*pointerToMethod)())
{
referenceToSomeMethod = pointerToMethod; // save reference to method
}
int main()
{
referenceToSomeMethod = nullptr;
if (1 == 1)
{
// use of lambda on local scope
foo([]() {
printf("Executing callback function\n");
});
} // leaving scope lambda may not longer be valid?
// simulate some work
Sleep(10000);
if (referenceToSomeMethod != nullptr)
referenceToSomeMethod(); // execute lambda
}
在现实生活中,我会等到事件发生时才触发回调方法。我可以 运行 回调指针指向不再存在的函数的风险吗?
我知道这适用于 c# 和其他具有垃圾收集器的语言。但这适用于 C++ 吗?
带有空括号的 Lambda 等同于函数指针,并且将以相同的方式按值进行复制。回答是。