C ++: Acceso a métodos virtuales

Estoy tratando de usar la tabla de métodos virtuales para llamar a funciones por índice en una clase ... Supongamos que tenemos el siguiente 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;
};

Ya implementé esto utilizando matrices de funciones, if-statement y case-statement ... entonces, ¿hay un mejor enfoque para llamar a los métodos usando solo punteros (por ejemplo, acceso a vtable) o algo así?

Lo siento por mi horrible inglés: S ... y gracias de antemano!

EDIT: Gracias por toda la sugerencia! Voy a ampliar mi pregunta:

Después de resolver esto, voy a crear clases derivadas (por ejemplo, derivadas 1 y derivadas 2) con diferentes implementaciones de f_1, f_2, f_3 y tener un control de clase 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;
    }
};

Respuestas a la pregunta(4)

Su respuesta a la pregunta