C ++: Dostęp do metod wirtualnych

Próbuję użyć wirtualnej tabeli metod do wywołania funkcji według indeksu w klasie ... Załóżmy, że mamy następujący kod:

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;
};

Zaimplementowałem to już za pomocą tablic funkcji, instrukcji if i instrukcji case ... więc czy istnieje lepsze podejście do wywoływania metod przy użyciu tylko wskaźników (na przykład dostęp do vtable) lub czegoś takiego?

Przepraszam za mój okropny angielski: S ... i dzięki z góry!

EDIT: Dzięki za całą sugestię! Zamierzam rozszerzyć moje pytanie:

Po rozwiązaniu tego problemu utworzę klasy pochodne (na przykład pochodne1 i wyprowadzone 2) z różnymi implementacjami f_1, f_2, f_3 i mają taką kontrolę klas:

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