Wie speichere ich einen Funktionszeiger auf eine öffentliche Mitgliederfunktion einer abgeleiteten Klasse?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie speichere ich einen Funktionszeiger auf eine öffentliche Mitgliederfunktion einer abgeleiteten Klasse?

Post by Anonymous »

Ich habe eine Basis -Klasse mit einigen Methoden der identischen Signatur und einigen abgeleiteten Klassen. Die Programmlogik wählt, welche abgeleitete Klasse verwendet werden soll, welche Methode diese Entscheidungen später verwendet und nie später ändert. Einfach if oder Switch Anweisung und verwenden Sie sie als abgeleitet-> methodxx () . Ich möchte jedoch die Verwendung vereinfachen und beseitigen, wenn oder Switch über einen gespeicherten Zeiger auf eine bestimmte Methode. Dies scheint plausibel zu sein, aber ich kann es nicht genau herausfinden.

Code: Select all

#include 
#include 

using namespace std;

class Base {
public:
virtual void method01() = 0;
virtual void method02() = 0;
};

class Derived01 : public Base {
public:
void method01() final { std::cout (); // init. said pointer with a particular derivative
derived->method01();      // works fine, prints "001\n"
void (Base::*func)();     // "func" is a pointer to a "void Base::...()" function
func = &Base::method02;   // init. "func" with a pointer to a particular function from Base
(derived.get()->*func)(); // not exactly sure why this works and prints "002\n"
return 0;
}
Ich verstehe jedoch nicht, wie (und/oder warum) genau die letzte Zeile funktioniert, und wenn sie durch C ++ oder nur C Magie zur Umwandlung dieser Greuel - (abgeleitet ).get () ->*func) - in einen einfachen Kreis von More -Owdod () . Die globale Idee ist, dass es eine Basis -Klasse mit einer Reihe von Derivatexx Variationen mit derselben API gibt. Anschließend gibt es eine eigenständige API -Klasse, die eine Reihe von Einstellungen annimmt und entscheidet, welches Derivatexx im Inneren verwendet werden soll. Um die Dinge basierend auf Eingabeparametern zu vereinfachen und API -Klasse zu überprüfen, muss eine einzigartige_ptr erstellt und anstelle vieler Variablen für jede Klasse verwendet werden. Welches ist ein bisschen einfach zu machen. Dann gibt es ein Problem mit der jeweiligen Methode, und dort stellte sich die Frage.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post