C ++: виртуальные функции, которым необходимо вызывать один и тот же код?

У меня есть базовый класс и классы, производные от него. Базовый класс Controllable действует как интерфейс для цикла ввода, а другие классы являются производными от него, чтобы получить место в этом цикле для получения таких событий, как нажатие клавиши.

class Controllable{
public:
    virtual void setActive(bool state) { m_active = state; }
    virtual void input(Event & e) =0;
private:
    bool m_active;
};

class Button : public Controllable{
public:
    void setActive(bool state){ /*do extra work*/ m_active = state; }
    void input(Event & e) override;
};

Поскольку класс Button имеет дело с событиями из очереди событий, установка его в неактивное состояние (что выводит его из цикла ввода) может привести к пропуску важных событий, таких как нажатие клавиши, поэтому требуется дополнительный код, чтобы перевести его в дружественное неактивное состояние, если он когда-либо снова станет активным.

На мой вопрос , как лучше всего гарантировать, что setActive всегда имеет предполагаемый эффект переключения m_active в правильное состояние, в то же время не требовать, чтобы производные классы определяли его, если им не нужно прикреплять дополнительный необходимый код?

5
задан Aaron McDaid 9 January 2012 в 18:24
поделиться