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