【发布时间】:2022-01-16 09:01:38
【问题描述】:
说我这边有这个程序情况:
struct A
{
int(*func_ptr)();
};
struct B
{
int b = 0;
void SetFunctionPointerToLambda(A& a)
{
a.func_ptr = [=] () { return b; };
}
};
int main()
{
A a;
B b;
b.SetFunctionPointerToLambda(a);
}
我想将对象 A 的函数指针设置为 lambda,它基于对象 B 的值。 那么,这要怎么做呢?
当前错误信息:
loeschen5.cc: In member function 'void B::SetFunctionPointerToLambda(A&)':
loeschen5.cc:14:41: error: cannot convert 'B::SetFunctionPointerToLambda(A&)::<lambda()>' to 'int (*)()' in assignment
a.func_ptr = [=] () { return b; };
^
感谢您的帮助!
【问题讨论】:
-
这能回答你的问题吗? Passing capturing lambda as function pointer
-
为了能够捕获
b,lambda 必须表现得像一个结构。所以不能转换成函数指针。 -
好的,所以当我确定在某些情况下 b 不会改变时,我可以用 b ( = 0) 的实际值替换 b 吗?
-
... 或者我可以以某种方式将 b 的地址传递给 lambda 吗?
-
当然可以,您只需将函数指针更改为指向带参数的函数的指针。
标签: c++ function pointers lambda member