c++ - C++:无法在赋值中将 A::lambda() 转换为 B::*function 指针
问题描述
我有一个 OneWireDriver 类:
class OneWireDriver;
typedef void (OneWireDriver::*StateHandler)(void);
class OneWireDriver{
Timer *timer; //a pointer to a Timer object working for this OneWireDriver object
void registerTimerCallback(void); //a method to set this timer's callback function
StateHandler stateHandler; //a handler pointing to a function OneWireDriver will execute from the current state
void executeState(void){ //a method to execute the function saved in stateHandler from another class
(this->*stateHandler)();
}
//...
};
类计时器有:
class Timer;
typedef void (Timer::*TimerCallback)(void);
class Timer{
TimerCallback callback; //a pointer to a callback function which is executed when its period elapses
void executeCallback(void){ //a method to execute the function saved in callback from another class
(this->*callback)();
}
//...
};
现在的挑战是使 Timer 的对象能够在 Timer 所属的 OneWireDriver 对象上运行 executeState(),而无需计时器明确知道它所属的 OneWireDriver 对象。
我的老师建议我尝试使用lambdas,所以我尝试了:
void OneWireDriver::registerTimerCallback(void){
this->timer->callback = [&]{ this->executeState(); };
};
无法编译:
cannot convert 'OneWireDriver::registerTimerCallback()::<lambda()>' to 'TimerCallback {aka void (Timer::*)()}' in assignment
在这一点上,我怀疑是否甚至可以使用 lambdas 来分配一个类的方法以从另一个类执行,除非另一个类知道第一个类的身份(因为它一定不知道)。
1) lambda 表达式可以帮助我解决挑战吗?
2)如果不是,有什么办法可以解决Timer对象调用它所属的OneWireDriver对象的方法,而不知道OneWireDriverObject的问题?还是 Timer 不必知道其 OneWireDriver 对象的潜在解决方法?
解决方案
推荐阅读
- linux - .Net Core 2.2 验证 jwt 失败,容器上出现 401
- jenkins - 詹金斯管道外壳+管道奇怪的行为
- tensorflow - 我是否需要修改我的 keras 代码才能在 gpu 上高效运行?
- uipath - 如何查找 UiPath Orchestrator 许可证类型和有关机器人并行运行限制的信息?
- user-interface - Flutter如何从子小部件更改父BottomNavigationBar索引
- cakephp - MVC:一种模型,多种应用
- foreign-keys - 如何在 Sybase 数据库中创建外键?
- mongodb - 副本集集群中 SECONDARY 节点上的 MongoDB 索引 - 如何删除?
- shutil - 使用 shutil.copy2() 复制 __init__.py 文件时,它会失败。如何复制 __init__.py 文件?
- dom - 来自特定服务器的特定 URL 上的 JSoup 超时