Вызов метода класса из метода вне класса

Всех приветствую.

Есть класс 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. Пожалуйста, помогите.


Ответы (0 шт):