C++ method pointer?

09/03/2016 - 18:14 von Hans-Peter Diettrich | Report spam
Problem: eine Klasse implementiert mehrere (gleichartige) Methoden, von
denen eine bestimmte zur Laufzeit aufgerufen werden soll. Leider sind
meine C++ Kenntnisse sehr angestaubt, ich komme nicht drauf wie sich das
mit einem Methoden-Pointer erledigen làßt :-(

Ewas konkreter: Es geht um die Klasse IRrecv aus der Arduino IRremote
Bibliothek. Sie enthàlt Dekodierer für verschiedene Protokolle, z.B.
decodeNEC(), decodeSony(), die ich schon von allem überflüssigen Ballast
befreit habe. Nun möchte ich einen Pointer auf eine dieser Methoden
innerhalb seiner Klasse erzeugen, vorbesetzen und dann aufrufen. Sowas wie:

In der Bibliothek:

class IRrecv {
public:
bool decodeNEC();
bool decodeSony();
...
bool() *Decoder; //??? soll auf eine der o.g. Methoden zeigen
void begin(???); //soll Decoder mit dem übergebenen Parameter
initialisieren
char read(); //soll intern Decoder aufrufen
};

IRecv::read() {
if (*Decoder()) //??? soll die Methode aufrufen
return results.asc;
else
return '?';
}

Im Programm:

IRrecv irrecv(IR_PIN); //erzeugt Instanz (Singleton)

void setup() {
irrecv.begin(&decodeNEC); //??? soll den Pointer initialisieren
}

void loop() {
if (irrecv.available()) {
char data = irrecv.read();
...
}
}

Da die Methode nur innerhalb der (selben) Instanz aufgerufen werden
soll, könnte ein einfacher Pointer ausreichen?

Wie müssen die oben markierten Stellen genau aussehen?

TIA
DoDi
 

Lesen sie die antworten

#1 Christian Zietz
09/03/2016 - 18:24 | Warnen spam
Hans-Peter Diettrich schrieb:

Problem: eine Klasse implementiert mehrere (gleichartige) Methoden, von
denen eine bestimmte zur Laufzeit aufgerufen werden soll. Leider sind
meine C++ Kenntnisse sehr angestaubt, ich komme nicht drauf wie sich das
mit einem Methoden-Pointer erledigen làßt :-(



1. Eine C++-Newsgroup existiert. Dort wàre Deine Frage sogar on-topic.
2. Der lehrbuchhafte Weg in C++ wàre, die decode-Methode als virtuelle
Methode in einer Basisklasse zu deklarieren und die tatsàchlichen
Dekoder dann in davon erbenden Klassen zu implementieren.
3. <https://isocpp.org/wiki/faq/pointer...embers>

Christian
Christian Zietz - CHZ-Soft - czietz (at) gmx.net
WWW: http://www.chzsoft.de/
PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA

Ähnliche fragen