gpt4 book ai didi

C++ 如何将 lambda [&]() 作为 void (*draw)() 的参数传递

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

我有一个将 void 函数作为参数的方法。像这样,

void update(void (*draw)());
main我将如何传递一个可以将范围外变量传递给 update 的 lambda ?
如果我这样做,它会起作用
Player player(20, 20);
void drawFace(){
player.draw();
}

int main() {
myClass.update(drawFace);
}
上面有这样的代码的问题是它只有在 Player 时才有效定义为全局变量。我将如何通过 lambda 代替 Player可以在 main 中声明。我想要这样的东西
int main() {
Player player(20, 20);
myClass.update([&](){
player.draw();
});
}

最佳答案

使用 std::function<void()>在声明论点时解决了问题。
而不是定义 update

    void update(void (*draw)());
像这样使用它可以解决问题
    void update(std::function<void()>draw);
现在我可以将函数或 lambda 传递给它,两者都可以开箱即用。
作品!
Player player(20, 20);
void drawFace(){
player.draw();
}

int main() {
myClass.update(drawFace);
}
或者
现在也有效!
int main() {
Player player(20, 20);
myClass.update([&](){
player.draw();
});
}

关于C++ 如何将 lambda [&]() 作为 void (*draw)() 的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68504025/

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