Methoden Adresse für Vektortabelle
-
Hallo,
in einem embedded Projekt habe ich mit C++ begonnen. In einer Klasse cUSART habe ich eine Methode cUSART::rx_isr(). Die Adresse für diese Methode muss in einer Vektortabelle eingetragen werden.
Das habe ich so versucht. Dabei ist das nur ein Auszug aus der Tabelle. default_isr wird für alle nicht benutzten Vektoren eingetragen:
...
default_isr,
&term.rx_isr,
default_isr,
...term ist eine Instanz von cUSART. Leider gibt mir der Compiler (IAR) diese Fehlermeldung aus:
Error[Pe300]: a pointer to a bound function may only be used to call the function.
Wie kann man so eine Methodenadresse richtig in eine Vektortabelle eintragen?
Grüße
BitConverter
-
Die Adresse von rx_isr() bekommst du so:
&cUSART::rx_isrWar das die Frage?
-
Hallo wx++,
danke für Deine Antwort. Ich brauche die Adresse von der Instanz "term" - also term.rx_isr(). Es gibt halt mehrere Instanzen von cUSART, z.B. auch eine Instanz usart_gps.
Grüße
BitConverter()
-
Die Adresse von term ist &term. Die Adresse von term::rx_isr gibt es nicht, weil die Funktion nur einmal für alle Instanzen im Speicher liegt.
Wahrscheinlich suchst du folgendes:returntype (cUSART::*method)() = &cUSART::rx_isr; cUSART* object = &term; //aufruf: (object->*method)();
-
Was ist eine Vektortabelle?
-
Grundsätzlich: Zur Speicherung und dem Aufruf einer nicht-statischen Methode, ist immer zusätzlich ein Instanzzeiger nötig. In C++ umgeht man dieses Problem gerne durch eine weitere Ebene der Indirektion (z.B. via std::tr1::function bzw. boost::function, das ein Funktionsobjekt erzeugt, das in einem solchen Fall intern beide Zeiger hält).
Es gibt keinen portablen Weg mit nur einem Zeiger für eine nicht-statische Methode auszukommen.
-
Was ist ein Instanzzaehler ...

-
knivil schrieb:
Was ist ein Instanzzaehler ...

Eine unsinnige Erfindung eines müden Geistes (Vermutlich steht der Zähler für die Schafe). Habs korrigiert
