Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.sci.electronics > #203983

Re: C++ method pointer?

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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