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


Groups > de.sci.electronics > #203890 > unrolled thread

C++ method pointer?

Started byHans-Peter Diettrich <DrDiettrich1@aol.com>
First post2016-03-09 18:14 +0100
Last post2016-03-11 09:14 +0100
Articles 5 on this page of 25 — 6 participants

Back to article view | Back to de.sci.electronics


Contents

  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]


#203962

FromHeinz Saathoff <newshsaat@arcor.de>
Date2016-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]


#203984

FromHans-Peter Diettrich <DrDiettrich1@aol.com>
Date2016-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]


#203994

FromEdzard Egberts <ed_09@tantec.de>
Date2016-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]


#204026

FromEdzard Egberts <ed_09@tantec.de>
Date2016-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]


#204033

FromHeinz Saathoff <newshsaat@arcor.de>
Date2016-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