У меня есть базовый класс и классы, производные от него. Базовый класс 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
в правильное состояние, в то же время не требовать, чтобы производные классы определяли его, если им не нужно прикреплять дополнительный необходимый код?