Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.sci.electronics > #203983
| From | Hans-Peter Diettrich <DrDiettrich1@aol.com> |
|---|---|
| Newsgroups | de.sci.electronics |
| Subject | Re: C++ method pointer? |
| Date | 2016-03-10 16:33 +0100 |
| Message-ID | <dkdk1sFemhsU1@mid.individual.net> (permalink) |
| References | <dkb40lFph51U1@mid.individual.net> <nbr91m$rv5$1@news.albasani.net> |
Edzard Egberts schrieb:
> Hans-Peter Diettrich wrote:
>> 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 :-(
>> (Singleton)
>
> Ein Singleton kann eigentlich komplett statisch sein, so dass Du die
> einfacheren C-Funktionspointer verwenden kannst, indem Du die Methoden
> static definierst und ggf. einen this-Pointer auf Deine Instanz übergibst:
In diesem Fall würde ich die Instanz ganz wegoptimieren. Bislang werden
die zugehörigen Daten in 3 Strukturen gespeichert, eine statische für
den Interrupt-Handler, eine für das dekodierte Ergebnis (Parameter), und
dann noch die Klasse selbst. Das Ergebnis habe ich momentan bereits in
die Klasse integriert, es könnte aber auch komplett global werden und
auch die Elemente der Klasse enthalten.
[...]
> int main()
> {
> IRrecv irrecv;
> irrecv.read(IRrecv::decodeNEC);
Hier stört mich noch der aufwendige Parameter (Tippfehler!), dafür
sollte ich wohl noch Makros definieren.
> Die Dekoder-Funktionen müssen dann noch nicht einmal Methoden sein,
> sondern können extern definiert werden. Die Klasse könnte man so auf ein
> Datenobjekt beschränken, das die Parameter für die Dekoder enthält.
Das war auch meine erste Idee. Doch dann habe ich mich für die
Beibehaltung der Klasse entschieden, mit den Standard-Methoden begin(),
available() und read(), die jeder Arduino Programmierer von den anderen
Stream-Klassen gewohnt ist.
> Eine echte C++-Lösung wäre dagegen die Verwendung eines Interface, mit
> dem sich die Funktionen als Objekt handhaben lassen:
Dagegen spricht die universelle decode() Methode, die alle verfügbaren
Dekoder durchprobiert, und die weiterhin nutzbar sein sollte. Die müßte
dann auf Instanzen aller abgeleiteten Klassen zugreifen, mit höherem
Speicherbedarf (zumindest bei den VMT).
Vielen Dank für die ausführlichen Codechnipsel :-)
Zumindest weiß ich jetzt, was für eine Sorte Pointer ich brauche, und
hoffe, daß ich nun auch die Lücken im ursprünglichen Beitrag richtig
füllen kann.
DoDi
Back to de.sci.electronics | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
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
csiph-web