Вызов метода класса из метода вне класса
Всех приветствую.
Есть класс Joystick:
class Joystick : public Controller
{
public:
virtual bool initController(IControllerListener* listener);
virtual ControllerState getCurrentState();
JoystickButtons* getButtonsStateFromAnalogState(ControllerState state);
private:
void onMiddleButtonPressed();
};
Controller:
class Controller
{
public:
virtual bool initController(IControllerListener* listener) = 0;
virtual ControllerState getCurrentState() = 0;
protected:
IControllerListener* controller_listener;
};
И IControllerListener:
class IControllerListener
{
public:
virtual void onControlChanged(Controller* controller, ControllerState state) = 0;
};
В классе Joystick объявлен метод onMiddleButtonPressed. Его нужно вызвать из функции вне класса(?):
void Joystick::onMiddleButtonPressed()
{
this->controller_listener->onControlChanged(this, )
}
// функция вне класса, существует лишь в реализации (cpp файле)
void buttonPressed(){
this->onMiddleButtonPressed();
}
Необходимо это сделать из-за того, что функция attachInterrupt
attachInterrupt(digitalPinToInterrupt(2), buttonPressed, LOW);
Имеет такой вид:
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(), int mode
Если в нее тупо запихивать
bool Joystick::initController(IControllerListener* listener)
{
attachInterrupt(digitalPinToInterrupt(2), onMiddleButtonPressed, LOW);
return true;
}
Получаю ошибку:
аргумент типа "void (Joystick::)()" несовместим с параметром типа "void ()()"
То есть, нужно либо функцию
void Joystick::onMiddleButtonPressed()
преобразовать в void*, либо как-то ее вызвать из buttonPressed. Пожалуйста, помогите.