#include class StateBase { public: virtual void handleThis() { std::cout << "handleThis: StateBase" << std::endl; } virtual void handleThat() { std::cout << "handleThat: StateBase" << std::endl; } }; class StateInactivated : public virtual StateBase {}; class StateMixinQueueableMessages : virtual StateBase { private: virtual bool stateCanExecuteMessages() = 0; public: void handleThis() override { std::cout << "handleThis: StateMixinQueueableMessages: " << (stateCanExecuteMessages() ? "Executing message" : "Queueing message") << std::endl; } }; class StateActivated : public virtual StateMixinQueueableMessages, public virtual StateBase { bool stateCanExecuteMessages() override { return true; } }; class StateReconfiguring : public virtual StateMixinQueueableMessages, public virtual StateBase { bool stateCanExecuteMessages() override { return false; } }; int main() { StateInactivated inactivated; StateActivated activated; StateReconfiguring reconfiguring; inactivated.handleThis(); activated.handleThis(); reconfiguring.handleThis(); std::cout << std::endl; inactivated.handleThat(); activated.handleThat(); reconfiguring.handleThat(); }