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