【发布时间】:2020-07-27 17:18:33
【问题描述】:
可以像这样在本地范围内声明 lambdas:
// 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++ 吗?
【问题讨论】:
-
this 回答你的问题了吗?
-
只要没有捕获。
-
为什么不使用
std::function<void()>并通过右值引用传递。从而允许您捕获 lambda 并将其移动到位?因此,您可以保留任何捕获的参数。 -
我不能使用 std::function 我正在为微控制器 (arduino) 创建一个类库。但是是的,我必须将参数作为参考存储在其他地方,这是相同的想法。