uhs*_*l_m 1 c++ lambda typedef arduino
我有一个功能,例如:
typedef void(*timercallback)(void);
void timer1_attachInterrupt(timercallback userFunc);
我希望调用成员方法而不是 C 风格的函数,所以我尝试了以下 lambda:
timer1_attachInterrupt([this](void) -> void { _member_method(); });
但是我收到编译器错误:
不存在从“lambda [] void () -> void”到“timercallback”的合适转换函数
据我所知,lambda 有像 typedef 一样的 void 参数,并像 typedef 一样返回 void。我错过了什么?
我错过了什么?
lambda 创建了一个闭包对象,因为它需要捕获状态。因此,您不能将它传递到需要常规函数指针的地方。
由于您的 API 没有为将状态传递给回调做任何规定,您将需要使用诸如全局变量之类的令人不快的东西。
如果您可以修改timer1_attachInterrupt1,那么我建议您允许它接受任何(类型擦除的)函子。std::function只是实现这一目标的实用程序:
using timercallback = void(void);
void timer1_attachInterrupt(std::function<timercallback> userFunc);
1很明显,在arduino编辑后 OP 不能。但是我将建议留给任何可能修改其功能的人。
| 归档时间: | 
 | 
| 查看次数: | 3479 次 | 
| 最近记录: |