I have this class in my project:
class InputReactor
{
public:
//Input reactor needs pointer to Input
InputReactor(Input* input_) :
m_input(input_)
{
}
virtual void input_quit(const float scale_);
virtual void input_left(const float scale_);
virtual void input_right(const float scale_);
virtual void input_up(const float scale_);
virtual void input_down(const float scale_);
virtual void input_axisupd(const float scale_);
virtual void input_ok(const float scale_);
virtual void input_cancel(const float scale_);
virtual void input_shift(const float scale_);
virtual void input_ctrl(const float scale_);
//All events reactor is subscribed at
std::vector<EVENTS> subscribed_at;
void setInputEnabled(bool inputEnabled_);
bool isInputEnabled();
//InputReactor automatically removes itself from subscribers
virtual ~InputReactor()
{
for (EVENTS ev : subscribed_at)
{
m_input->unsubscribe(ev, this);
}
}
private:
Input* m_input = nullptr;
bool m_inputEnabled = false;
};
Any object that is derived from InputReactor can subscribe to different types of events (enum class EVENTS
) in Input class and override required input_event function. Input class keeps InputReactor*
. The problem is this part:
//That could be a meme
virtual void input_quit(const float scale_);
virtual void input_left(const float scale_);
virtual void input_right(const float scale_);
virtual void input_up(const float scale_);
virtual void input_down(const float scale_);
virtual void input_axisupd(const float scale_);
virtual void input_ok(const float scale_);
virtual void input_cancel(const float scale_);
virtual void input_shift(const float scale_);
virtual void input_ctrl(const float scale_);
Making just a single regular method with switch
inside would ruin the whole point, and it's impossible to override template method so i cannot simply make a single method like this:
template<EVENTS ev>
void input(const float scale_);
Probably I also could make a single template class for each EVENT and simply inherit all required, but that would make class definitions have tons of parents, and i wouldn't be able to enable / disable input with a single bool variable, so it's not better at all. Is there any way I can at least make it less ugly?