【发布时间】:2019-05-12 13:47:31
【问题描述】:
我对 C++ 很陌生,我正在努力完成一个需要在不同类实例之间传输对回调方法的引用的项目。我知道这个主题对于 C++ 初学者来说是一个很常见的问题。我知道成员函数指针与“标准”函数指针不同,但我找不到任何解决我的具体问题的帖子(但可能是因为,鉴于我缺乏 C++ 经验,我不理解提供的答案)。
我尝试开发的系统是基于:
- ControllerManager 类(单例)
- 控制器基类
- 从 Controller 类继承的一些特定 Controller 类(FanController、LighController 等)
我想做的是从一个 FanController 实例调用 ControllerManager 类的 addCallback 方法。该方法将一个指向 FanController 的任何公共方法的指针作为参数,以便 ControllerManager 稍后可以对该方法进行回调(我必须指定 ControllerManager 包含 Controller 类的定义,但对FanController 类)
到目前为止,我还没有找到任何可行的解决方案,我唯一设法得到的是一个非常糟糕的解决方法(为简单起见,只指出了相关的方法):
class Controller {
public:
virtual void callback();
};
class FanController:Controller {
public:
virtual void callback();
};
class ControllerManager
{
private:
static ControllerManager *_instance;
Controller *_controller;
public:
void addCallback(Controller * controller)
{
_controller = controller;
}
static void periodicCallback()
{
_instance->_controller->callback();
}
};
在运行时,FanController 实例提供了她自己对 ControllerManager 单例的引用:
ControllerManager::getInstance()->addController(this);
并且ControllerManager可以调用FanController实例的回调方法:
_instance->_controller->callback();
这种解决方法非常有限,因为它只允许调用父 Controller 类声明的方法。
我要实现的是一个系统,它允许特定控制器向 ControllerManager 提供其成员方法(在 Controller 类中不存在)的引用,以便它可以调用这些方法。
如果有人可以帮助我,我提前感谢他/她。
【问题讨论】: