C ++: Zugreifen auf virtuelle Methoden
Ich versuche, die virtuelle Methodentabelle zu verwenden, um Funktionen nach Index in einer Klasse aufzurufen ... Angenommen, wir haben den folgenden Code:
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;
};
Ich habe dies bereits mithilfe von Funktionsarrays, if-Anweisung und case-Anweisung implementiert. Gibt es einen besseren Ansatz, um Methoden nur mit Zeigern (z. B. Zugriff auf die vtable) oder ähnlichem aufzurufen?
Entschuldigung für mein schreckliches Englisch: S ... und vielen Dank im Voraus!
EDIT: Danke für den ganzen Vorschlag! Ich werde meine Frage erweitern:
Nach dem Beheben dieses Problems werde ich abgeleitete Klassen (zum Beispiel abgeleitete 1 und abgeleitete 2) mit verschiedenen Implementierungen von f_1, f_2, f_3 erstellen und eine Klassensteuerung wie diese haben:
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;
}
};