将类成员指针传递给 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 Tickn");
}, 1000, 1000);
错误不是来自创建 lambda;而是来自尝试将 lambda 传递给 Timer::start()
。
Timer::start()
期待一个类型 void (__cdecl *)(Timer *)
的参数——即一个普通的函数指针。因为您正在尝试捕获一些数据([this]
(,所以您的 lambda 表达式正在创建一个函子(可调用对象(。
一想:Timer::start()
的函数指针参数将传递一个指针(它希望指向适当的函数(。没有地方可以传递任何额外的数据(this
、函子的地址等(。(这就是为什么 C 中的回调代码通常具有回调数据参数和函数指针的原因。
更全面的答案:将 lambda 作为函数指针传递
相关文章:
- 列表.erase 中的 lambda 表达式
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 没有捕获列表的 lambda 通常作为普通函数实现吗?
- C++参数列表中带有省略号的 lambda
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在为工作线程访问 lambda 中捕获的向量列表中的元素引用时,是否需要互斥锁?
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- 在没有捕获列表的情况下访问 lambda 中的变量
- Do=在lambda的捕获列表中捕获this指针
- 如何使可变 lambda 捕获列表的某些成员变得非常量
- 在类中使用时,lambda 捕获列表中的 [this] 和 [&] 是否等效?
- 为什么 lambda 表达式的捕获列表无法使用结构化绑定分解
- C++ lambda 参数列表
- 构造函数初始化列表中可变参数的Lambda捕获
- C++11 lambda捕获列表[=]使用引用
- 带有变量参数列表的c++11 lambda函数
- 构造函数初始值设定项列表中的 Lambda 可以使用哪些标识符
- 是否可以提取 lambda 的捕获列表
- 您可以在类的初始化列表中使用 lambda 吗?