C ++: acessando métodos virtuais

Eu estou tentando usar a tabela de método virtual para chamar funções por índice em uma classe ... Suponha que temos o seguinte código:

class Base
{
public:
    Base() {}
    virtual ~Base() {}

    virtual Base* call_func(unsigned int func_number)
    {
       // Some way to call f_n
    }
protected:
    virtual Base* f_1() const = 0;
    virtual Base* f_2() const = 0;
    virtual Base* f_3() const = 0;
};

Eu já implementei isso usando arrays de função, if-statement e case-statement ... então, existe uma abordagem melhor para chamar métodos usando apenas ponteiros (acessando o vtable, por exemplo) ou algo assim?

Desculpe pelo meu horrível Inglês: S ... e obrigado antecipadamente!

EDIT: Obrigado por toda a sugestão! Eu vou expandir minha pergunta:

Depois de resolver isso eu vou criar classes derivadas (por exemplo, derivado1 e derivado 2) com diferentes implementações de f_1, f_2, f_3 e ter um controle de classe como este:

class Control
{
protected:
    Base* current;

public:
    Control(Base* curr = new derived1): current(curr) {}
    virtual ~Control() 
    {
        delete current;
    }
    virtual void do_something(unsigned int func_numb)
    {
        delete current
        Base* new = current->next_state(stl);
        current = new;
    }
};

questionAnswers(4)

yourAnswerToTheQuestion