Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.sci.electronics > #203890 > unrolled thread
| Started by | Hans-Peter Diettrich <DrDiettrich1@aol.com> |
|---|---|
| First post | 2016-03-09 18:14 +0100 |
| Last post | 2016-03-11 09:14 +0100 |
| Articles | 5 on this page of 25 — 6 participants |
Back to article view | Back to de.sci.electronics
C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-09 18:14 +0100
Re: C++ method pointer? Christian Zietz <newsgroup.1001@chz.xyz> - 2016-03-09 18:24 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-09 19:43 +0100
Re: C++ method pointer? Christian Zietz <newsgroup.1001@chz.xyz> - 2016-03-09 20:03 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-09 20:29 +0100
Re: C++ method pointer? Christian Zietz <newsgroup.1001@chz.xyz> - 2016-03-09 20:47 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-09 19:57 +0100
Re: C++ method pointer? Thorsten Böttcher <thorsten_nospam@gmx.net> - 2016-03-09 19:49 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-09 20:11 +0100
Re: C++ method pointer? Thorsten Böttcher <thorsten_nospam@gmx.net> - 2016-03-09 20:35 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-09 22:31 +0100
Re: C++ method pointer? Thorsten Böttcher <thorsten_nospam@gmx.net> - 2016-03-10 06:45 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-10 16:59 +0100
Re: C++ method pointer? Marc Santhoff <m.santhoff@t-online.de> - 2016-03-09 20:47 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-09 22:33 +0100
Re: C++ method pointer? Christian Zietz <newsgroup.1001@chz.xyz> - 2016-03-09 23:11 +0100
Re: C++ method pointer? Marc Santhoff <m.santhoff@t-online.de> - 2016-03-10 01:29 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-11 13:24 +0100
Re: C++ method pointer? Edzard Egberts <ed_09@tantec.de> - 2016-03-10 08:51 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-10 16:33 +0100
Re: C++ method pointer? Heinz Saathoff <newshsaat@arcor.de> - 2016-03-10 09:14 +0100
Re: C++ method pointer? Hans-Peter Diettrich <DrDiettrich1@aol.com> - 2016-03-10 16:42 +0100
Re: C++ method pointer? Edzard Egberts <ed_09@tantec.de> - 2016-03-10 19:12 +0100
Re: C++ method pointer? Edzard Egberts <ed_09@tantec.de> - 2016-03-11 08:04 +0100
Re: C++ method pointer? Heinz Saathoff <newshsaat@arcor.de> - 2016-03-11 09:14 +0100
Page 2 of 2 — ← Prev page 1 [2]
| From | Heinz Saathoff <newshsaat@arcor.de> |
|---|---|
| Date | 2016-03-10 09:14 +0100 |
| Message-ID | <uua2eblbcc1t441qf71hghevr33osd87to@4ax.com> |
| In reply to | #203890 |
Moin,
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 :-(
>
>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
>}
Ich hab das mal so geschrieben, wie Du es vermutlich haben willst,
nämlich mit Member Funktions Pointer:
//-------------------------
class IRrecv {
public:
bool decodeNEC();
bool decodeSony();
//...
bool (IRrecv::*Decoder)() ; // Member Function Pointer
//soll Decoder mit dem übergebenen Parameter initialisieren
void begin( bool (IRrecv::*which)() );
char read(); //soll intern Decoder aufrufen
};
char IRrecv::read() {
if ( (this->*Decoder)() ) // soll die Methode aufrufen
return '!';
else
return '?';
}
IRrecv irrecv; //erzeugt Instanz (Singleton)
void setup() {
//MemFunc Pointer initialisieren
irrecv.begin( &IRrecv::decodeNEC );
}
Syntax ist etwas gewöhnungsbedürftig, aber das sind einige andere
Konstrukte in C++ auch, z.B. templates.
- Heinz
[toc] | [prev] | [next] | [standalone]
| From | Hans-Peter Diettrich <DrDiettrich1@aol.com> |
|---|---|
| Date | 2016-03-10 16:42 +0100 |
| Message-ID | <dkdk20FemhsU2@mid.individual.net> |
| In reply to | #203962 |
Heinz Saathoff schrieb: > Ich hab das mal so geschrieben, wie Du es vermutlich haben willst, > nämlich mit Member Funktions Pointer: [...] Danke, das ist genau die Antwort, die ich erwartet habe :-) Jetzt komme ich wohl nicht umhin, Dich im Header der Bibliothek als Mitautor zu erwähnen ;-) DoDi
[toc] | [prev] | [next] | [standalone]
| From | Edzard Egberts <ed_09@tantec.de> |
|---|---|
| Date | 2016-03-10 19:12 +0100 |
| Message-ID | <nbsdfk$mbm$1@gwaiyur.mb-net.net> |
| In reply to | #203984 |
> Heinz Saathoff schrieb: > >> Ich hab das mal so geschrieben, wie Du es vermutlich haben willst, >> nämlich mit Member Funktions Pointer: Beim letzten Projekt habe ich den Arduino vollgeschrieben und musste für die letzten Features anderen Code optimieren. Bei einem Singleton würde ich keine Instanzen-Information mitschleifen und glaube nicht, dass das bei nur einer Instanz wegoptimiert wird. Ich würde daher empfehlen, die Codegrößen der statischen mit der "instanziierbaren" Klasse zu vergleichen. Diese beiden Varianten zu implementieren ist einfach, "wichtig ist, was hinten 'rauskommt" (Helmut Kohl ;o).
[toc] | [prev] | [next] | [standalone]
| From | Edzard Egberts <ed_09@tantec.de> |
|---|---|
| Date | 2016-03-11 08:04 +0100 |
| Message-ID | <nbtqma$o63$1@news.albasani.net> |
| In reply to | #203994 |
Edzard Egberts wrote: > Beim letzten Projekt habe ich den Arduino vollgeschrieben Das war übrigens lustig - der serielle Ausgabepuffer hat den Stack überschrieben und der Code, mit dem ich die Belegung des Arbeitspeichers ermitteln wollte, passte nicht mehr ins EEPROM. Also so lange den Code zurechtgedengelt, bis alles wieder in den Chip passte - mit Assembler wär' das nicht passiert! ;o)
[toc] | [prev] | [next] | [standalone]
| From | Heinz Saathoff <newshsaat@arcor.de> |
|---|---|
| Date | 2016-03-11 09:14 +0100 |
| Message-ID | <09v4eb9oarrdbm3duoho8v6ojmeetf9drf@4ax.com> |
| In reply to | #203994 |
Edzard Egberts schrieb: >> Heinz Saathoff schrieb: >> >>> Ich hab das mal so geschrieben, wie Du es vermutlich haben willst, >>> nämlich mit Member Funktions Pointer: > >Beim letzten Projekt habe ich den Arduino vollgeschrieben und musste für >die letzten Features anderen Code optimieren. Bei einem Singleton würde >ich keine Instanzen-Information mitschleifen und glaube nicht, dass das >bei nur einer Instanz wegoptimiert wird. Ich würde daher empfehlen, die >Codegrößen der statischen mit der "instanziierbaren" Klasse zu >vergleichen. Diese beiden Varianten zu implementieren ist einfach, >"wichtig ist, was hinten 'rauskommt" (Helmut Kohl ;o). Es ist immer gut zu wissen, wie der benutzte Compiler/Linker Quellcode auf Maschiencode umwandelt und wie bestimmte Hochsprachenkonstrukte durch den Compiler umgesetzt werden. Mit diesem Wissen kann man schon etwas optimieren, sei es Codegröße, RAM belegung oder Laufzeit. - Heinz
[toc] | [prev] | [standalone]
Page 2 of 2 — ← Prev page 1 [2]
Back to top | Article view | de.sci.electronics
csiph-web