C++ 将类成员指针传递给Lambda捕获列表c++;11
我试图将成员指针传递给C++11 lambda,但没有成功C++ 将类成员指针传递给Lambda捕获列表c++;11,c++,c++11,lambda,C++,C++11,Lambda,我试图将成员指针传递给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
是成员指针
我一直得到以下错误
error C2664: 'void Timer::start(void (__cdecl *)(Timer *),int,int)': cannot convert argument 1 from 'Scheduler::start::<lambda_292d45d0b31426827abd837d93b45bff>' to 'void (__cdecl *)(Timer *)'
错误不是因为创建lambda;这是从尝试将lambda传递到
Timer::start()
开始的
Timer::start()
需要类型为void(\uu cdecl*)(Timer*)
的参数,即普通函数指针。因为您试图捕获一些数据([此]
),所以lambda表达式正在创建一个函子(可调用对象)
想想看:Timer::start()
的函数指针参数将传递一个指针(它希望该指针指向适当的函数)。没有地方可以传递任何附加数据(此
、函子的地址等)。(这就是为什么C中的回调代码通常有一个回调数据参数和一个函数指针。)
更全面的回答:只有captureless Lambda可以转换为函数指针。这意味着什么?如果你想得到正确制作的帮助,你应该发布
计时器的定义,至少是相关部分。我不明白为什么有人会对这个答案投赞成票。它包含很多错误。
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);