gpt4 book ai didi

C++ lambda - 如何捕获函数参数

转载 作者:行者123 更新时间:2023-12-01 20:12:10 25 4
gpt4 key购买 nike

我有一个函数 (fn1),它接收另一个函数 (fn2) 作为参数。我希望从 lambda 中执行该参数,该参数将作为参数传递给另一个函数 (fn3)。像这样的事情:

void fn1(void (*fn2)()) {
// execute fn2 parameter inside lambda
fn3([ fn2 ] () { fn2(); });
}

void fn3(void (*lambda)()) {
// do stuff ...
lambda();
}

如果我尝试编译它,我会收到以下错误:
无法转换'fn3(void (*)())::''void (*)()'用于论证'1''void fn1(void (*)())'

如果我只是在 lambda 内部执行该函数(没有 fn3),它就可以正常编译。

void fn1(void (*fn2)()) {
[ fn2 ] () { fn2(); }();
}

我做错了什么?

最佳答案

捕获的 Lambda 具有状态,因此它们与自由函数有根本的不同,并且您不能在两者之间进行转换。

您可以更改函数以接受任何可调用的函数,而不是使用函数指针:

void foo(){}

template <typename T>
void fn3(T t) {
// do stuff ...
t();
}

void fn1(void (*fn2)()) {
// execute fn2 parameter inside lambda
fn3([ fn2 ] () { fn2(); });
}

int main() {
fn1(foo);
}

我只修改了 fn3,但我建议对 fn1 进行同样的修改。

关于C++ lambda - 如何捕获函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59504936/

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