簡體   English   中英

將類成員指針傳遞給Lambda捕獲列表c ++ 11

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM