[英]Passing class member pointer to Lambda capture-list c++11
我嘗試將成員指針傳遞給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 *)
-即純函數指針。 因為您正在嘗試捕獲某些數據( [this]
),所以您的lambda表達式正在創建函子(可調用對象)。
考慮一下: Timer::start()
的函數指針參數將傳遞給單個指針 (它希望指向適當的函數)。 沒有地方可以傳遞任何其他數據( this
,函子的地址等)。 (這就是為什么C中的回調代碼通常具有回調數據參數以及函數指針的原因。)
更全面的答案:將lambda作為函數指針
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.