gpt4 book ai didi

c++ - 非返回 lambda,捕获作为函数指针

转载 作者:行者123 更新时间:2023-11-28 02:47:45 24 4
gpt4 key购买 nike

我的代码 (C++) 需要将 lambda 作为函数指针传递。我的 lambda 总是:a) 返回 void; b) 从不接受任何参数; c) 可以有零个或多个捕获参数。我想将此 lambda 作为函数指针传递,但无法这样做。有什么建议吗?

示例代码:

void fptrfunc(void (*fptr)()){ 
fptr();
}

int main(){
int x = 2;
fptrfunc([](){cout << "LAMBDA CALL--1"<< endl; }); // Works
fptrfunc([x](){cout << "LAMBDA CALL--2"<< endl; }); // Does not compile
return 0;
}

最佳答案

Lambda 函数实际上只是函数,即不携带和数据,可以转换为函数指针。为了清楚地没有任何数据,捕获必须是空的。签名的其他部分无关紧要:只要类型匹配,您就可以将 lambda 函数 [带空捕获] 分配给函数指针。

当您需要使用 lambda 函数获取数据时,您将无法将其转换为函数指针,因为没有地方可以存储额外的数据。如果您有一个需要传递 lambda 函数的合理接口(interface),您可能会传递一些用户数据,通常是 void*。 .您可以将辅助函数指针和 lambda 组合起来,可能由合适的 std::function<Sig> 包裹, 由用户数据指向仍然调用 lambda 函数。

关于c++ - 非返回 lambda,捕获作为函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com