gpt4 book ai didi

c++ - 将类成员指针传递给 Lambda 捕获列表 c++11

转载 作者:行者123 更新时间:2023-11-28 05:06:25 24 4
gpt4 key购买 nike

我尝试将成员指针传递给 C++11 lambda 但没有成功

pHub是成员指针

我不断收到以下错误

error C2664: 'void Timer::start(void (__cdecl *)(Timer *),int,int)': cannot convert argument 1 from 'Scheduler::start::<lambda_292d45d0b31426827abd837d93b45bff>' to 'void (__cdecl *)(Timer *)'

我希望能够在函数内部使用 pHub

  pTimer = new Timer(pHub->getLoop());
pTimer->start([this](Timer *tick) {
uv_update_time(pHub->getLoop());
start_time = uv_now(pHub->getLoop());
printf("Im Tick\n");
}, 1000, 1000);

最佳答案

错误不是来自创建 lambda;它来自于尝试将 lambda 传递给 Timer::start()

Timer::start() 需要一个类型为 void (__cdecl *)(Timer *) 的参数——即一个普通的函数指针。因为您正在 try catch 一些数据 ([this]),所以您的 lambda 表达式正在创建一个仿函数(一个可调用对象)。

想一想:Timer::start() 的函数指针参数将被传递一个指针(它期望指向一个适当的函数).没有地方可以传递任何附加数据(this、仿函数的地址等)。 (这就是为什么 C 中的回调代码通常有一个回调数据参数和一个函数指针。)

更全面的答案:Passing lambda as function pointer

关于c++ - 将类成员指针传递给 Lambda 捕获列表 c++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44638263/

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