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?
